如果我想将一个shell脚本作为ENTRYPOINT执行,并在shell脚本执行完成后进入docker容器。
我的Dockerfile最后有以下几行:
WORKDIR artifacts
ENTRYPOINT ./my_shell.sh
当我使用以下命令运行它时,它会执行shell脚本但不会进入docker容器。
docker run -it testub /bin/bash
如果我在这里遗失任何东西,有人可以告诉我吗?
答案 0 :(得分:0)
有两个选项可以控制容器在启动时运行的内容,入口点(ENTRYPOINT
)和命令(CMD
)。他们遵循以下逻辑:
您可以覆盖图像中定义的一个或两个值。 docker run -it --entrypoint /bin/sh testub
将运行/ bin / sh而不是./my_shell.sh
,从而覆盖入口点。 docker run -it testub /bin/bash
将覆盖该命令,使容器以./my_shell.sh /bin/bash
开头。
快速回答是运行docker run -it --entrypoint /bin/bash testub
,然后从那里开始./my_shell.sh
。更好的解决方案是更新./my_shell.sh
以检查任何其他参数,并在脚本末尾使用以下命令运行它们:
if [ $# -gt 0 ]; then
exec "$@"
fi