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

shell脚本执行完成后进入docker容器,docker,dockerfile,docker-machine,Docker,Dockerfile,Docker Machine,如果我想执行一个shell脚本作为入口点,并在shell脚本执行完成后进入docker容器 我的Dockerfile末尾有以下几行: WORKDIR artifacts ENTRYPOINT ./my_shell.sh 当我使用下面的命令运行它时,它执行shell脚本,但不进入docker容器 docker run -it testub /bin/bash 有人能告诉我这里是否遗漏了什么吗?有两个选项可以控制容器启动时运行的内容,入口点(entrypoint)和命令(CMD)。它们遵循以下逻

如果我想执行一个shell脚本作为入口点,并在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
,覆盖entrypoint。而
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

我试过使用
docker run-it--entrypoint/bin/sh testub
。我能够进入容器,但它无法运行我在DockerfileYes中提到的作为入口点的shell脚本,请参见最后一段。不能运行两个命令作为入口点,但可以运行一个shell,然后在该shell中启动脚本。或者从您的脚本中,您可以启动一个在最后描述的shell。因此,我必须在进入容器后运行shell脚本。我无法先使用
docker run
运行它,然后进入容器?当您运行的命令退出时,容器也会退出,此时唯一的选择是重新启动以前运行的同一命令。如果容器尚未退出,则可以
docker exec
在正在运行的容器中运行命令。但是,我再次给了您需要在
my_shell.sh
末尾包含的3行代码,您为什么拒绝该选项?我对my_shell.sh末尾要添加的行有点困惑,这些行会使docker容器处于活动状态并进入其中,而不是退出容器吗?因为我的最终目标是进入容器并让用户执行他们想要执行的任何内容,所以shell脚本只是用于基本的公共设置,我希望使用
docker run
执行它,而不是由用户执行。