shell脚本执行完成后进入docker容器
如果我想执行一个shell脚本作为ENTRYPOINT,并在shell脚本执行完成后进入docker容器。
我的Dockerfile在最后有以下几行:
WORKDIR artifacts ENTRYPOINT ./my_shell.sh
当我用下面的命令运行它时,它会执行shell脚本,但不会进入docker容器。
docker run -it testub /bin/bash
有人可以让我知道,如果我在这里失踪的东西?
有两个选项控制启动时容器运行的内容,入口点( 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
。 更好的解决scheme是更新./my_shell.sh
以检查是否有其他参数,并在脚本的末尾使用以下参数运行它们:
if [ $# -gt 0 ]; then exec "$@" fi