美文网首页
docker CMD执行 容器内没有后台服务的概念

docker CMD执行 容器内没有后台服务的概念

作者: Ppnn13Yu | 来源:发表于2018-06-13 14:52 被阅读0次


    Docker 不是虚拟机,容器中的应用都应该以前台执行,而不是像虚拟机、物理机里面那样,

    用 upstart/systemd 去启动后台服务,容器内没有后台服务的概念。

    如果将 CMD 写为:

    CMD service nginx start

    然后发现容器执行后就立即退出了。甚至在容器内去使用 systemctl 命令结果却发现根本执

    行不了。这就是因为没有搞明白前台、后台的概念,没有区分容器和虚拟机的差异,依旧在

    以传统虚拟机的角度去理解容器。

    对于容器而言,其启动程序就是容器应用进程,容器就是为了主进程而存在的,主进程退

    出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。

    而使用 service nginx start 命令,则是希望 upstart 来以后台守护进程形式启动 nginx 服

    务。而刚才说了 CMD service nginx start 会被理解为 CMD [ "sh", "-c", "service nginx

    start"] ,因此主进程实际上是 sh 。那么当 service nginx start 命令结束后, sh 也就结

    束了, sh 作为主进程退出了,自然就会令容器退出。

    正确的做法是直接执行 nginx 可执行文件,并且要求以前台形式运行。比如:

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

    相关文章

      网友评论

          本文标题:docker CMD执行 容器内没有后台服务的概念

          本文链接:https://www.haomeiwen.com/subject/yeideftx.html