Docker为何刚运行就退出了

引言

最近群里的好多新接触Docker的朋友,好多都遇到了相同的问题,使用php

$ docker run -d ubuntu /bin/bash

运行了一个简单的容器后,而后docker ps -a 进行查看, 会发现容器已经退出了。nginx

其实呢,这个问题并不复杂,了解了下面的内容,我想,你就知道该如何处理了.web

根源

很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令若是不是那些一直挂起的命令(好比运行top,tail),就是会自动退出的

这个是 docker 的机制问题,好比你的 web 容器,咱们以 nginx 和 fpm 为例,
正常状况下,咱们配置启动服务只须要启动响应的 service 便可,例如
docker

service nginx start && service php5-fpm start

可是,这样作, nginx 和 fpm 均为后台进程模式运行,就致使 docker 前台没有运行的应用,
这样的容器,后台启动后,会当即自杀,由于他以为他没事可作了.ubuntu

解决方法

1. 最佳的解决方案是,将你要运行的程序之前台进程的形式运行,固然,若是你的容器须要同时启动多个进程,
那么也只须要,或者说只能将其中一个挂起到前台便可.
好比上面所说的 web 容器,咱们只须要将启动指令修改成:bash

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

这样,fpm会在容器中之后台进程的方式运行,而nginx则挂起进程至前台运行,这样,就能够保持容器不会认为没事可作而自杀了.spa

2. 对于有一些你可能不知道怎么前台运行的程序,提供一个投机方案,你只须要在你启动的命令以后,添加相似于 tail top 这种能够前台运行的程序,这里特别推荐 tail ,而后持续输出你的log文件.
仍是以上文的web容器为例,咱们还能够写成:.net

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

>>>>>END<<<<<<code

博客搬运地址

相关文章
相关标签/搜索