为什么docker运行后就自动退出了

docker 容器默认会把容器内部第一个进程,也就是pid=1的程序作为docker容器是否正在运行的依据,
如果docker 容器pid挂了,那么docker容器便会直接退出。

docker run的时候把command做为容器内部命令,如果你使用nginx,那么nginx程序将后台运行,这个时候nginx并不是pid为1的程序,而是执行的bash,这个bash执行了nginx指令后就挂了,所以容器也就退出了。

Docker 容器启动时,默认会把容器内部第一个进程,也就是pid=1的程序,作为docker容器是否正在运行的依据,如果 docker 容器pid=1的进程挂了,那么docker容器便会直接退出。

Docker未执行自定义的CMD之前,nginx的pid是1,执行到CMD之后,nginx就在后台运行,bash或sh脚本的pid变成了1。
所以一旦执行完自定义CMD,nginx容器也就退出了。

解决方法:

在编写dockerfile的时候加上  “daemon off;”参数,如下:

FROM ubuntu:16.04

Run apt-get update
Run apt-get install -y nginx

CMD ["nginx","-g","daemon off;"]

构建容器后使用:

docker run -d ubuntu:16.04   #-d参数让容器在后台运行

 

posted @   浅笑19  阅读(1619)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2021-03-19 log4j:WARN No appenders could be found for logger (freemarker.cache)
2021-03-19 java response输出文件流
2021-03-19 java使用itext导出PDF文本绝对定位(实现方法)
2021-03-19 BigDecimal加减乘除计算
2021-03-19 Freemarker循环遍历
2021-03-19 springboot freemarker模板引擎 配置属性说明
2021-03-19 springboot项目中全局处理freemarker渲染页面时出现空值异常
点击右上角即可分享
微信分享提示