[英]How to prevent Docker's container from being stopped after exiting a /bin/bash session
如何防止退出作为ENTRYPOINT
提供的/bin/bash
会话后停止Docker的容器?
我的意思是。 假设我有一个用Clojure编写的Web服务,并且想将其包装在一个容器中。 这就是Dockerfile
外观:
FROM pandeiro/lein
MAINTAINER some <some@email.com>
RUN apt-get update && apt-get install -y git
RUN git clone https://github.com/some/some.git && cd web-service && lein deps
ENTRYPOINT ["/bin/bash"]
我将/bin/bash
用作入口点的原因是,用户应首先对Web服务的配置文件进行一些更改。
当我们执行docker run -p 443:443 -t -i container-name
,它将打开一个/bin/bash
会话,我们可以在其中安装文本编辑器,对配置文件进行一些更改,然后通过lein run
Web服务。 但是问题是,当我们关闭bash
会话时,整个Docker容器都停止了,因此Web服务将不再可用。
在这种情况下我该怎么办? 在我提供的示例中,您还看到哪些其他缺陷?
问题是您的/ bin / bash由docker作为PID1启动。 PID1进程接收SIGINT和SIGKILL,并负责终止子进程。 为了解决这个问题,您可以使用exec
启动您的应用程序,它将把它安装为PID1进程而不是bash。
您还应该自动执行容器中的所有配置步骤。 交互式( -it
)登录主要用于帮助开发/调试容器。 避免在部署中执行任何手动步骤。
docker run -p 443:443 container-name bash -c "myconfigscript.sh && exec lein run"
如果您在容器上的Shell会话中,则Ctrl + C将允许您在不停止容器的情况下断开连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.