疑问说明
今天使用镜像启动容器
运行命令
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
来源:https://www.cnblogs.com/java265/p/16344726.html
本站部分图文来源于网络,如有侵权请联系删除。