如何在退出作为/bin/bash
提供的ENTRYPOINT
session 后防止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
session ,我们可以在其中安装文本编辑器,对配置文件进行一些更改并通过lein run
运行Web服务。但是问题是,当我们关闭bash
session 时,整个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"
关于bash - 如何防止退出/bin/bash session 后停止Docker的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39439394/