Dockerfile CMD instruction will exit the container just after running it
我想在容器启动时设置一些配置,为此我使用shell脚本。但一旦脚本结束,我的容器就会退出,我尝试了-d标志/分离模式,但它永远不会以分离模式运行。
下面是我的档案
1 2 3 4 5 6 7 | FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh CMD /usr/local/bin/shell.sh |
下面是我的剧本
1 2 | #!/bin/bash echo Hello-docker |
不带任何标志运行
1 | docker run hello-docker |
这将在我的控制台上打印"Hello Docker"并退出
使用-itd标志运行
1 | docker run -itd hello-docker |
和我的控制台输出一样,这一次也将很快退出。:(
我在命令部分看到的区别是,当我运行其他图像时,命令部分将显示"/bin/bash",并将以分离模式继续。
当我在带有shell脚本的容器中运行图像时,命令部分将显示"/bin/sh-c/usr/loca",然后退出。
我想运行容器,直到我不手动停止它。
EDIT:
在dockerfile中添加entrypoint指令后,将不会执行shell脚本:(
1 2 3 4 5 6 7 8 9 | FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh CMD /usr/local/bin/shell.sh ENTRYPOINT /bin/bash |
As per docker documentation here
当使用可选参数运行容器时,将重写cmd,因此如果我使用下面的某些参数运行docker image,将不会执行cmd指令。:(
1 | sudo docker run -it --entrypoint=/bin/bash <imagename> |
docker容器的运行时间与dockerfile中的
在您的情况下,您的
您可以覆盖
1 | sudo docker run -it --entrypoint=/bin/bash <imagename> |
这将在容器中启动交互式shell,而不是执行
如果您希望容器保持活动状态,则必须确保您的
您可以使用
最后,通过一些实验,我得到了以下最好的结果
我的dockerfile没有什么问题,它是正确的。
1 2 3 4 5 6 7 | FROM ubuntu:14.04 ADD shell.sh /usr/local/bin/shell.sh RUN chmod 777 /usr/local/bin/shell.sh CMD /usr/local/bin/shell.sh |
为了得到预期的结果,我只需在shell脚本文件中再添加一个命令(/bin/bash),如下所示,vola以我最好的方式工作。
1 2 3 4 5 | #!/bin/bash echo"Hello-docker"> /usr/hello.txt /bin/bash |
您还可以修改第一个dockerfile,替换
通过
这样,脚本不会终止,并且容器保持运行。
1 | CMD bash -C '/path/to/start.sh';'bash' |