为什么我的docker在执行我的shell脚本后退出?

问题描述:

为什么我的docker在执行我的shell脚本后退出?谢谢。为什么我的docker在执行我的shell脚本后退出?

泊坞版本:

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

[email protected]:/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 

而且我得到的日志:

[email protected]:/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! 

在那之后,我的码头工人容器出口:

[email protected]:/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线,你的过程完成,码头集装箱应该退出。

如果你想防止这种情况,你必须保持你的进程运行。在这里你有很多选择,比如在前台运行你的进程,或者通过做一些类似tail -f /some/log/file的日志来源于你的后台运行进程来保持进程运行。

+0

也'睡眠无限'或'而真;做回声你好世界;睡1; done'也可以正常工作 – user2915097

+0

基本上任何事情都会持续下去,越有意义越好! – mohamnag

+0

@mohamnag我明白了你的观点。我尝试在我的run.sh文件中添加'sleep infinity',然后'docker run -it -d --name test -p 8080:80 lw96/ubuntu-16.04 -lnmp1.3 sh/root/run.sh'工作很好。同样,像'tail -f/dev/null'可以帮助,由于某种原因从[Bash:无限的睡眠(无限阻塞)]更具有兼容性(http://stackoverflow.com/questions/2935183/bash-无限睡眠无限阻塞) –