Docker启动镜像就自动退出问题

一、问题引入


根据镜像启动容器,执行命令如下:docker run --name mycentos -d centos,通过docker ps查看正在运行中容器,缺找不到mycentos容器。再次通过docker ps -a查看发现,mycentos容器已经处于停止状态了。

二、原因


Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(eg. 运行top,tail等),就是会自动退出
这个是 docker 的机制问题,比如我们的 web 容器,以 nginx 和 fpm 为例, 
正常情况下,启动服务只需启动相应的 service 即可,例如:service nginx start && service php5-fpm start,但是,这样做, nginx 和 fpm 均以后台进程模式运行,就会导致 docker 前台没有正在运行的应用,so,容器会立即自杀,因为他觉得没事可做了。


三、解决方案


3.1 将要运行的程序以前台进程的形式运行


将要运行的程序以前台进程的形式运行,如果容器需要同时启动多个进程,那么也只需要将其中一个挂起到前台即可。 
比如上面所说的 web 容器,只需要将启动指令修改为:

service php5-fpm start && nginx -g "daemon off;"


3.2 投机方案


对于可能不知道怎么前台运行的程序,提供一个投机方案,只需要在启动的命令之后,添加类似于 tail top 这种可以前台运行的程序,这里推荐tail ,然后持续输出log文件即可。

service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log

再以上面所说的 web 容器为例,可以写成:

service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log
 

3.3 以centos/ubuntu为例


同3.1,在启动centos/ubuntu容器时,可以做一个手脚:做一个死循环,持续输出任意,这样容器不会认为没事可做而自杀了。

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

3.4 docker run 直接进入容器内

docker  run  -it  image_id  /bin/bash 或

docker  run  -it  image_id  /bin/sh

  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值