代码之家  ›  专栏  ›  技术社区  ›  Aleks G

Docker容器即使与-it一起运行也会退出

  •  0
  • Aleks G  · 技术社区  · 7 年前

    myservice start -然后,它分叉并守护主进程并退出。然后,主进程在网络套接字上侦听传入的命令。这个过程本身工作得很好。

    在Dockerfile中,最后两个命令是:

    WORKDIR "/app/myservice"
    CMD ["bin/myservice", "start"]
    

    镜像成功建立。现在,当我这样运行时:

    docker run -d -p 7890:7890 myimage
    

    容器启动然后退出。在日志中,我可以看到服务在容器退出之前启动,退出代码为0。

    看着 this question ,显然,如果我这样运行它:

    docker run -dit -p 7890:7890 myimage
    

    我错过了什么?我怎样才能让集装箱保持运转?

    3 回复  |  直到 7 年前
        1
  •  2
  •   user2915097    7 年前

    比较这两个容器的寿命

    1) docker run -it ubuntu sh -c "echo Hello ; sleep 3"

    docker run -it ubuntu sh -c "while true ; do echo Hello ; sleep 3 ; done"

    检查文档中的CMD

    https://docs.docker.com/engine/reference/builder/#cmd

    和入口点

    https://docs.docker.com/engine/reference/builder/#entrypoint

    当你

    docker run -it ubuntu bash

    只要退出bash,容器就完成并退出。

    同时检查

    What is the difference between CMD and ENTRYPOINT in a Dockerfile?

        2
  •  1
  •   NilColor    7 年前

    一般来说,您不需要对容器中的任何内容进行后台监控。常见的模式是启动一个永远有效的命令并打印到STDOUT/STDERR中。 当/如果该命令失败,容器将停止。 所以,移除

    ... 然后分叉并守护主进程并退出。。。

    分离并启动主要流程。

        3
  •  0
  •   network_newbie    7 年前

    当容器第一个PID 1(更新!)进程已完成(与0或其他一起退出),同时发生容器退出。

    要使容器保持活动状态,第一个pid也必须保持活动状态。。。

    tail -f /dev/null

    推荐文章