如果镜像有一个入口脚本,Docker无法启动交互式shell

我的定制图像以

ENTRYPOINT [ "/bin/bash", "-c", "/home/tool/entry_script.sh" ] 

这是绝对必要的,因为在运行时,用户必须做的第一件事情是更新一个已经克隆的github项目,用户通常会忘记这么做。

但是,当我尝试启动使用

 docker run -it --rm my_image /bin/bash 

我可以看到ENTRYPOINT脚本正在执行,但是然后容器退出。

由于-it标志,我希望执行/bin/bash和shell保持交互模式。

我究竟做错了什么?

更新:我添加我的入口脚本

 #!/bin/bash echo "UPDATING GIT REPO"; cd /home/tool/cloned_github_tools_root git pull git submodule init git submodule update echo "Entrypoint ended"; 

其实我没有在运行时的错误

在docker集装箱中设置和input点时。 这是它将运行的唯一的东西。 这是唯一重要的过程(PID 1)。 一旦你的entry_point.sh脚本完成运行并返回并退出代码,docker就认为容器已经完成了它所需要做的和退出,因为它里面唯一的进程退出了。

如果你想在容器中启动一个shell,你可以像这样修改你的入口点脚本:

 #!/bin/bash echo "UPDATING GIT REPO"; cd /home/tool/cloned_github_tools_root git pull git submodule init git submodule update echo "Entrypoint ended"; /bin/bash "$@" 

这会在repo更新完成后启动一个shell。 当用户退出shell时,容器现在将退出。

-i-t标志将确保会话给你一个stdin / stdout,并为你分配一个psuedo-tty,但是它们不会自动为你运行bash。 有些容器甚至没有bash。