我有以下 Dockerfile,所以我可以登录容器来检查镜像 Some_Linux_Img。
FROM Some_Linux_Img
ENTRYPOINT ["/bin/bash"]
我建造了它
docker build -t test:v2 .
Sending build context to Docker daemon 2.048 kB
Step 1/2 : FROM abc.com/shared/miniconda
---> ec1a66fb9030
Step 2/2 : ENTRYPOINT /bin/bash
---> Running in ea14b4ce6c6e
---> 21ebe99c7ef1
Removing intermediate container ea14b4ce6c6e
Successfully built 21ebe99c7ef1
然而,它在 docker run
之后立即退出?
$ docker run --name test test:v2 $ docker ps -a
状态显示“退出 (0) x 秒前”。我想在容器内运行一些 bash 命令来检查 Linux 映像 Some_Linux_Img
。 (docker exec -it test /bin/bash
)
答案 0 :(得分:1)
容器在其主进程退出时退出,并且由于您已将 ENTRYPOINT
指定为 ["/bin/bash"]
,因此它只是执行命令并退出。
如果您只想让容器继续运行以进行几分钟的测试,您可以将入口点命令重写为:
docker run --name test test:v2 sleep 300
答案 1 :(得分:1)
首先,如您所见,容器的退出代码是0
。这意味着,容器中的主进程(在您的情况下为 /bin/bash
)无错误退出。
您在这里遇到的问题(与其他答案所说的相反)可能与提供的入口点或 cmd 无关。我想你只是想启动一个容器并进入它的 bash shell,对吗?
虽然这显然违背了容器化的目的,但我认为它对于调试/教育目的非常有用。所以这里是如何做到这一点(使用而不是你的 docker run
命令):
docker run -it --name test test:v2
如您所知,我在您的命令中添加了速记标志 i
和 t
,这样做的作用是为您的容器分配一个 tty (-t
) 并在“交互”模式,这意味着您将能够在容器外壳 (-i
) 启动后立即与其交互。
这当然只是非常基础的解释,请参考我在docker文档中标注的部分:https://docs.docker.com/engine/reference/run/#foreground