0
点赞
收藏
分享

微信扫一扫

docker run -d 一启动就退出

迎月兮 2022-11-29 阅读 56

疑问说明

        今天使用镜像启动容器 

         运行命令

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"

参照资料:

   ​​http://www.java265.com/docker/202206/3648.html​​

举报

相关推荐

0 条评论