Docker为什么刚运行就退出了
2024-09-01 13:58:46
引言
最近群里的好多新接触Docker的朋友,好多都遇到了相同的问题,使用
$ docker run -d ubuntu /bin/bash
运行了一个简单的容器后,然后docker ps -a 进行查看, 会发现容器已经退出了。
其实呢,这个问题并不复杂,了解了下面的内容,我想,你就知道该如何处理了.
根源
很重要的要说明的一点: Docker容器后台运行,就必须有一个前台进程.
容器运行的命令如果不是那些一直挂起的命令(比如运行top
,tail),就是会自动退出的
这个是 docker 的机制问题,比如你的 web 容器,我们以 nginx 和 fpm 为例,
正常情况下,我们配置启动服务只需要启动响应的 service 即可,例如
service nginx start && service php5-fpm start
但是,这样做, nginx 和 fpm 均为后台进程模式运行,就导致 docker 前台没有运行的应用,
这样的容器,后台启动后,会立即自杀,因为他觉得他没事可做了.
解决方法
1. 最佳的解决方案是,将你要运行的程序以前台进程的形式运行,当然,如果你的容器需要同时启动多个进程,
那么也只需要,或者说只能将其中一个挂起到前台即可.
比如上面所说的 web 容器,我们只需要将启动指令修改为:
service php5-fpm start && nginx -g "daemon off;"
这样,fpm会在容器中以后台进程的方式运行,而nginx则挂起进程至前台运行,这样,就可以保持容器不会认为没事可做而自杀了.
2. 对于有一些你可能不知道怎么前台运行的程序,提供一个投机方案,你只需要在你启动的命令之后,添加类似于 tail top 这种可以前台运行的程序,这里特别推荐 tail ,然后持续输出你的log文件.
还是以上文的web容器为例,我们还可以写成:
service nginx start && service php5-fpm start && tail -f /var/log/nginx/error.log
>>>>>END<<<<<<
博客搬运地址
最新文章
- 【转】PHP ob_start() 函数介绍
- 3.6---双栈排序(CC150)
- Haskell 笔记 ③
- The command &#39;new_value&#39; for SQLPlus
- oracle视图总结
- 【转】浅析Windows编程的剪贴板
- bzoj3351:[ioi2009]Regions
- Your build host version of Xamarin.IOS (release NO.)is too recent to work with the IOS designer
- 【Flask】 WTForm表单编程
- Codechef March Challenge 2014——The Street
- .NET CORE 2.0之 httpcontext
- SQL CHECK 约束
- SpringBoot笔记十五:任务
- 0913_Python初识及变量
- 打印不同对象的字节表示 ( 对int*强制转换成unsigned char*的理解 )
- nginx防DOS攻击
- 解决报错 Page directive: illegal to have multiple occurrences of contentType with different values (old:
- 【JavaScript】使用setInterval()函数作简单的轮询操作
- 【最大化平均值】POJ3111-K Best
- 【BZOJ】3391: [Usaco2004 Dec]Tree Cutting网络破坏(dfs)
热门文章
- JAVA基础——异常--解析
- form表单传输多余参数
- python 使用time / datetime进行时间、时间戳、日期转换
- gulp-file-include 合并 html 文件
- mysql连接错误解决(ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol ref used (client option &#39;secure_auth&#39; enabled))
- 恶补数论(二) Baby-Step-Giant-Step 大步小步求离散模对数
- 离职 mark
- java中List遍历删除元素-----不能直接 list.remove()
- POJ 2217 Secretary
- 转载 - Struts2基于XML配置方式实现对action的所有方法进行输入校验