【问题标题】:How to keep an infinite loop running in order to not close a container in docker如何保持无限循环运行以便不关闭docker中的容器
【发布时间】:2016-10-02 16:07:28
【问题描述】:
我想在执行运行命令后保持 docker 容器运行(容器在docker run.. 之后立即退出。我知道命令:
while :;do
sleep 300
done
在docker run 期间将使其运行,但我如何编辑 Dockerfile 本身以使其保持运行?
【问题讨论】:
标签:
docker
containers
dockerfile
【解决方案1】:
您可以通过将要执行的命令放入脚本中来做到这一点,并将脚本设置为 Docker 在启动容器时运行的命令:
FROM sixeyed/ubuntu-with-utils
RUN echo 'ping localhost &' > /bootstrap.sh
RUN echo 'sleep infinity' >> /bootstrap.sh
RUN chmod +x /bootstrap.sh
CMD /bootstrap.sh
当您从这个 Dockerfile 构建一个镜像并从该镜像运行一个容器时,它将在后台启动 ping,在前台启动 sleep,因此您可以使用 docker run -d 守护容器,它将保持正在运行。
但这并不理想 - Docker 只监视它在运行容器时启动的最后一个进程,因此它将检查sleep 而不是ping。如果ping 命令出错,容器将继续运行。通常,您希望真正的应用程序是您从CMD 开始的唯一东西。