为什么我的docker退出后执行我的shell脚本?
为什么我的docker退出后执行我的shell脚本? 谢谢。
Docker版本:
docker --version Docker version 1.12.4, build 1564f02
我的图片:
docker pull lw96/ubuntu-16.04-lnmp1.3
运行后:
docker run -it -d --name test -p 8080:80 lw96/ubuntu-16.04-lnmp1.3 sh /root/run.sh
我检查了: docker ps -a
root@ubuntu:/home/liwei# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 68c0ce4c59f7 a57b0c1a60cf "/bin/bash" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp test
这里是run.sh:
#! /bin/bash lnmp restart echo "lnmp already start" exit 0
我得到日志:
root@ubuntu:/home/liwei# docker logs -f test +-------------------------------------------+ | Manager for LNMP, Written by Licess | +-------------------------------------------+ | http://lnmp.org | +-------------------------------------------+ Stoping LNMP... Stoping nginx... nginx is not running. * MySQL server PID file could not be found! Gracefully shutting down php-fpm /etc/init.d/php-fpm: 82: kill: No such process ................................... failed. Use force-quit Starting LNMP... Starting nginx... done Starting MySQL .. * Starting php-fpm done lnmp already start!
此后,我的货船集装箱出口:
root@ubuntu:/home/liwei# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cb98d7427802 lw96/ubuntu-16.04-lnmp1.3 "sh /root/run.sh" 8 minutes ago Exited (0) 7 minutes ago test
但是,当我使用:
docker pull lw96/ubuntu-16.04-lnmp1.3 docker run -it -d -p 80:80 --name test lw96/ubuntu-16.04-lnmp1.3 docker exec -it test /bin/bash cd ~ && ./run.sh
我的容器运作良好。 为什么?????
只要主进程正在运行,Docker容器就会运行,只要入口点/命令进程退出,它就会结束。 在你的情况下,一旦你到达exit 0
线,你的过程完成,docker集装箱应该退出。
如果你想防止这个,你必须保持你的进程运行。 在这里有很多选项,比如在前台运行你的进程,或者通过tail -f /some/log/file
这样的日志来自后台运行进程来保持进程运行。