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