> 文档中心 > docker run -d 一启动就退出的解决方法分享

docker run -d 一启动就退出的解决方法分享


疑问说明

        今天使用镜像启动容器 

         运行命令

docker run --name tmpcentos -d centos

    通过docker ps查看正在运行中容器 ,发现在运行中的容器中无法找到缺找不到tmpcentos容器

    当通过docker ps -a查看发现

    tmpcentos容器已经处于停止状态了,那么为什么出现这种现象呢?

出现这种现象的原因:

docker容器运行必须有一个前台进程, 如果没有前台进程执行,容器认为空闲,容器运行的命令如果不是那些一直挂起的命令(eg. 运行top,tail等),就会自行退出
容器运行的命令如果不是那些一直挂起的命令( 运行top,tail、循环等),就是会自动退出
这个是 docker 的机制问题,

   如我们的 web 容器,以 nginx 和 fpm 为例,正常情况下,

  启动服务只需启动相应的 service 即可,

如:service nginx start && service php5-fpm start,但是,这样做, nginx 和 fpm 均以后台进程模式运行

    就会导致 docker 前台没有正在运行的应用,so,容器会立即自杀,因为他觉得没事可做了。
 

方案1
   开起一个死循环进程,让他不停的循环下去,前台永远有进程执行,那么容器就不会退出了,以centos为例

docker run -d centos /bin/sh -c "while true; do echo hello world; sleep 1; done"

方案2

在脚本最后一行添加tail -f /dev/null,这个命令永远完成不了,所以该脚本一直不会执行完,所以该容器永远不会退出
就是起一个死循环进程,让他不停的循环下去,前台永远有进程执行,那么容器就不会退出了

docker run -d --name ubuntu ubuntu /bin/bash -c "tail -f /dev/null" 

参照资料:

   如何使用后台守护式的方式启动容器呢?

字库吧