繁体   English   中英

如何防止退出/ bin / bash会话后停止Docker的容器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM