shell脚本执行完成后进入docker容器

时间:2017-04-24 00:32:49

标签: docker dockerfile docker-machine

如果我想将一个shell脚本作为ENTRYPOINT执行,并在shell脚本执行完成后进入docker容器。

我的Dockerfile最后有以下几行:

WORKDIR artifacts
ENTRYPOINT ./my_shell.sh

当我使用以下命令运行它时,它会执行shell脚本但不会进入docker容器。

docker run -it testub /bin/bash

如果我在这里遗失任何东西,有人可以告诉我吗?

1 个答案:

答案 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