我想在容器启动时设置一些配置,为此我使用的是 shell 脚本。但是一旦我的脚本结束,我的容器就会退出,我已经尝试使用 -d 标志/分离模式,但它永远不会在分离模式下运行。
下面是我的 Dockerfile
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
echo Hello-docker
- 运行没有任何标志
docker run hello-docker
这将在我的控制台上打印“Hello-docker”并退出
- 使用 -itd 标志运行
docker run -itd hello-docker
当我运行其他图像时,我在 COMMAND 部分看到的不同之处在于,命令部分将显示“/bin/bash”,并将继续以分离模式运行。
当我使用 shell 脚本在容器中运行我的图像时,COMMAND 部分将显示“/bin/sh -c /usr/loca”,然后退出。
我想运行容器,直到我不手动停止它。
编辑:
在 Dockerfile 中添加 ENTRYPOINT 指令后,这将不会执行我的 shell 脚本:(
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
根据 此处 的 docker 文档
使用替代参数运行容器时,CMD 将被覆盖,因此如果我使用以下一些参数运行 docker 映像,将不会执行 CMD 指令。 :(
sudo docker run -it --entrypoint=/bin/bash <imagename>
原文由 Anand Suthar 发布,翻译遵循 CC BY-SA 4.0 许可协议
最后通过一些实验,我得到了最好的结果,如下所示
我的 Dockerfile 没有任何问题,如下所示是正确的。
为了得到预期的结果,我只需在我的 shell 脚本文件中添加一个命令(/bin/bash),如下所示,vola 一切都以我最好的方式工作。