为什么我的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这样的日志来自后台运行进程来保持进程运行。