stille
V2EX  ›  Docker

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

  •  
  •   stille ·
    stilleshan · Feb 1, 2020 · 5341 views
    This topic created in 2366 days ago, the information mentioned may be changed or developed.

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

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

    • /etc/init.d/status-server start
    • /etc/init.d/caddy start

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

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

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

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

    4 replies    2020-02-02 00:13:30 +08:00
    blless
        1
    blless  
       Feb 1, 2020 via Android
    因为 docker 不是虚拟机,当做一个进程更合适。而且 docker 容器只会监听前台进程,你执行的命令如果执行完前台没有停留马上转为后台执行,容器也会认为当前进程已经退出,就自动退出容器
    ashong
        2
    ashong  
       Feb 1, 2020   ❤️ 1
    要么不要后台运行
    要么在 start.sh 末尾加入 tail -f /dev/null
    stille
        3
    stille  
    OP
       Feb 1, 2020
    @blless 谢谢
    @ashong 谢谢大佬,果然加上就可行了...虽然不懂什么意思..
    shawn7
        4
    shawn7  
       Feb 2, 2020
    对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。

    对于 CMD /bin/bash -c ./start.sh ,会被理解为 CMD [ "sh", "-c", "/bin/bash -c ./start.sh"],因此主进程实际上是 sh
    所以,正确的写法是 CMD ["/etc/init.d/caddy", "start"]
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2773 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:57 · PVG 20:57 · LAX 05:57 · JFK 08:57
    ♥ Do have faith in what you're doing.