如果镜像有一个入口脚本,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。