求教 dockerfile 启动命令 CMD 后容器就停了

2020-02-01 16:47:54 +08:00
 stille

ubuntu 内安装 caddy 和一个 serverstatus 程序.

测试时 dockerfile 没有写 CMD 命令,构建后启动容器正常.需要 docker exec 进入容器执行以下两个命令启动服务.

然后就正常启动了.可以使用.

但是我想把启动命令写到 CMD 里,让容器启动自动起这 2 个服务,查了很多多命令写法都不行,启动容器立马 down 了,于是写了个脚本,然后 CMD /bin/bash -c ./start.sh

可是依旧一启动就 down..查看日志,只显示这 2 个服务已经成功启动,没其他任何错误日志...

新手求助各位如何解决..

4757 次点击
所在节点    Docker
4 条回复
blless
2020-02-01 16:56:35 +08:00
因为 docker 不是虚拟机,当做一个进程更合适。而且 docker 容器只会监听前台进程,你执行的命令如果执行完前台没有停留马上转为后台执行,容器也会认为当前进程已经退出,就自动退出容器
ashong
2020-02-01 17:04:32 +08:00
要么不要后台运行
要么在 start.sh 末尾加入 tail -f /dev/null
stille
2020-02-01 18:07:59 +08:00
@blless 谢谢
@ashong 谢谢大佬,果然加上就可行了...虽然不懂什么意思..
shawn7
2020-02-02 00:13:30 +08:00
对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。

对于 CMD /bin/bash -c ./start.sh ,会被理解为 CMD [ "sh", "-c", "/bin/bash -c ./start.sh"],因此主进程实际上是 sh
所以,正确的写法是 CMD ["/etc/init.d/caddy", "start"]

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/641435

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX