Docker - Container未运行

Str*_*ger 63 docker docker-container

我完全是码头工人的新手.我尝试启动一个像以下一样的退出容器,

  1. 我列出了所有可用的容器docker ps -a.它列出了以下内容, docker list所有图片
  2. 我输入以下命令来启动处于退出阶段的容器并进入该图像的终端.

    docker start 79b3fa70b51d docker exec -it 79b3fa70b51d \bin\sh

  3. 它抛出以下错误.

    FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running

但是当我开始使用容器时docker start 79b3fa70b51d.它将容器ID作为输出抛出,如果一切正常,则是正常的.我不确定导致此错误的原因.任何关于这个的原因和建议的想法对我来说都会有很大帮助.提前致谢.

Dio*_*ung 42

默认情况下,如果您没有在容器上运行任何任务,则docker容器将立即退出.

要使容器在后台运行,请尝试使用--detach(或-d)参数运行它.

举些例子:

docker pull debian

docker run -t -d --name my_debian debian
e7672d54b0c2

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
e7672d54b0c2        debian              "bash"              3 minutes ago       Up 3 minutes                            my_debian

#now you can execute command on the container
docker exec -it my_debian bash
root@e7672d54b0c2:/# 
Run Code Online (Sandbox Code Playgroud)


Von*_*onC 21

容器79b3fa70b51d似乎只做一个echo.

这意味着它启动,回声然后立即退出.

下一个docker exec命令不会发现它正在运行,以便将自己附加到该容器并执行任何命令:它为时已晚.容器已经退出.

docker exec命令在正在运行的容器中运行新命令.

使用的命令docker exec仅在容器的主进程(PID 1)运行时运行

  • 嗨,您能否解释一下您是如何解决这个问题的.我担心这个答案没有多大意义 (29认同)
  • 嘿 VonC,感谢您的评论。我怎样才能实现进入图像的终端? (2认同)
  • @Udhayakumar一个简单的`docker run -it --rm udhayakumar/busyboxwithtouch`应该足以打开一个会话.默认入口点应该是/ bin/sh,但它取决于您的Dockerfile:您可能已经定义了不同的入口点和/或不同的CMD. (2认同)
  • @Jawad 通过在不带任何参数的情况下运行 busyboxwithtouch,它默认为交互式 shell(不会立即退出)。这意味着你可以稍后(`docker exec`)附加到它。 (2认同)

Mat*_*uhn 11

如果无法再次启动主进程(足够长时间),则commit容器也可能会生成新映像并从此映像运行新容器.虽然这不是通常的最佳实践工作流程,但我发现偶尔调试失败的脚本非常有用.

docker exec -it 6198ef53d943 bash
Error response from daemon: Container 6198ef53d9431a3f38e8b38d7869940f7fb803afac4a2d599812b8e42419c574 is not running

docker commit 6198ef53d943
sha256:ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33

docker run -it ace7ca65e6e bash
root@72d38a8c787d:/#
Run Code Online (Sandbox Code Playgroud)

  • 请注意,该命令在容器中启动“bash”进程。您之前可能运行过一个网络服务器,因此您必须检查需要使用哪个命令来恢复服务器。 (2认同)

Mic*_*zos 10

这种情况发生在脚本未启动服务等待请求的图像上,因此容器在脚本结束时退出。

大多数基本操作系统映像(centos、debian 等)或节点映像通常都是这种情况。

最好的办法是以交互模式运行图像。下面的示例与节点图像

docker run -it node /bin/bash
Run Code Online (Sandbox Code Playgroud)

输出是

docker run -it node /bin/bash
Run Code Online (Sandbox Code Playgroud)


zee*_*zee 8

这对我有用。

获取容器 ID 并重新启动。

docker ps -a --no-trunc 

ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33


docker restart ace7ca65e6e3fdb678d9cdfb33a7a165c510e65c3bc28fecb960ac993c37ef33
Run Code Online (Sandbox Code Playgroud)


小智 6

docker run -it <image_id> /bin/bash

以交互模式运行,然后执行 bash shell


小智 6

docker run -it --entrypoint /bin/bash <imageid>
Run Code Online (Sandbox Code Playgroud)

这是由 L0j1k 在下面的帖子中发布的,对我有用。

如何进入 Docker 容器的 shell?


小智 6

使用命令

> docker container ls

> docker image ls
Run Code Online (Sandbox Code Playgroud)

检查您的图片 ID 并将其记下来。这里我的图像 ID 是“6c929ca002da”,你们必须使用自己的图像 ID 而不是我的。

> docker start 6c929ca002da 
Run Code Online (Sandbox Code Playgroud)

这里我们的图像处于关闭模式,我们必须首先使用图像 ID 启动它。6c929ca002da 是我的图像 ID

> `docker exec -it 6c929ca002da bash`
Run Code Online (Sandbox Code Playgroud)

运行此命令后,您可以在运行模式下看到图像文件,如下所示

根@6c929ca002da

这里我使用root模式通过使用命令进入root模式

须藤苏


小智 5

首先,我们必须启动docker容器

ankit@ankit-HP-Notebook:~$  sudo docker start 3a19b39ea021

                        3a19b39ea021
Run Code Online (Sandbox Code Playgroud)

之后,检查docker容器:

ankit@ankit-HP-Notebook:~$  sudo docker ps -a

 CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                   PORTS               NAMES

  3a19b39ea021        coreapps/ubuntu16.04:latest   "bash"              13 hours ago        
  Up 9 seconds                                 ubuntu1

  455b66057060        hello-world                   "/hello"            4 weeks ago         

Exited (0) 4 weeks ago                       vigorous_bardeen
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令执行:

ankit@ankit-HP-Notebook:~$  sudo docker exec -it 3a19b39ea021 bash

root@3a19b39ea021:/# 
Run Code Online (Sandbox Code Playgroud)


Lig*_*t.G 5

原因就是接受的答案所说的。我添加一些额外的信息,这可能会提供对这个问题的进一步理解。

\n\n
    \n
  1. 据我所知,容器的状态包括CreatedRunningStopped、\nExited等。Dead
  2. \n
  3. 当我们执行 时docker create,docker 守护进程将创建一个\n容器,其状态为Created
  4. \n
  5. 当 时docker start,docker 守护进程将启动一个现有容器\n其状态可能为CreatedStopped
  6. \n
  7. 当我们执行 时docker run,docker 守护进程将分两步完成:docker createdocker start
  8. \n
  9. 当 时docker stop,显然 docker 守护进程将停止容器。\n因此容器将处于Stopped状态。
  10. \n
  11. 最重要的是,容器实际上想象自己\n在其中保存了一个很长时间的进程。当进程退出时,\n容器持有进程也会退出。因此,该容器的\n状态将为Exited
  12. \n
\n\n

进程什么时候退出?换句话说,\xe2\x80\x99是什么进程,我们是如何启动它的?
\n答案CMD在 dockerfile 或command以下表达式中,默认bash情况下在某些镜像中,即 ubutu:18.04。

\n\n
docker run ubuntu:18.04 [command]\n
Run Code Online (Sandbox Code Playgroud)\n