如何在退出/bin/bash
提供的ENTRYPOINT
会话后阻止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服务将不再可用。
在这种情况下我该怎么办?你在我提供的例子中看到了哪些其他缺陷?
答案 0 :(得分:2)
问题是您的/ 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"
答案 1 :(得分:0)
如果您在容器上的shell会话中,Ctrl + C将允许您在没有容器停止的情况下断开连接。