【问题标题】:docker run exited right away? [duplicate]docker run 立即退出? [复制]
【发布时间】:2021-02-09 18:58:07
【问题描述】:

我有以下 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)

【问题讨论】:

  • docker run --rm -it Some_Linux_Img bash 应该在基于该基础映像的临时容器中为您提供交互式外壳。您需要bash-it 选项才能不立即退出;请参阅链接的问题。您还可以通过将备用命令传递给docker run 来覆盖CMD;您不需要自定义图像或docker exec

标签: docker


【解决方案1】:

容器在其主进程退出时退出,并且由于您已将ENTRYPOINT 指定为["/bin/bash"],因此它只是执行命令并退出。

如果您只想让容器继续运行几分钟进行测试,您可以将入口点命令覆盖为:

docker run --name test test:v2 sleep 300

【讨论】:

    【解决方案2】:

    首先,如您所见,容器的退出代码为0。这意味着,容器中的主进程(在您的情况下为 /bin/bash)没有错误地退出。

    您在这里遇到的问题(与其他答案所说的相反)可能与入口点或提供的 cmd 无关。我想你只是想启动一个容器并进入它的 bash shell,对吧? 虽然这显然违背了容器化的目的,但我认为它对于调试/教育目的非常有用。所以这里是如何做到的(使用而不是你的docker run 命令):

    docker run -it --name test test:v2
    

    如您所知,我在您的命令中添加了速记标志 it,它的作用是为您的容器分配一个 tty (-t) 并以“交互”模式启动它,这意味着一旦启动,您将能够立即与容器外壳 (-i) 进行交互。

    这当然只是一个很基础的解释,请参考我在docker文档中标注的部分:https://docs.docker.com/engine/reference/run/#foreground

    【讨论】:

    • 是的,我只是想启动一个容器并进入它的 bash shell 来检查/调试一些东西。我认为/bin/bash 的入口点将继续运行,并且会话将等待交互式shell 中键入bash 之类的命令。我打算使用docker exec -it test /bin/bash 来附加正在运行的容器。
    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 2018-01-24
    • 1970-01-01
    • 2015-03-28
    • 2015-07-13
    • 1970-01-01
    相关资源
    最近更新 更多