无法停止或重新启动docker容器

pet*_*ter 46 docker

尝试停止或重新启动docker容器时,我收到以下错误消息:

$ docker restart 5ba0a86f36ea
Error response from daemon: Cannot restart container 5ba0a86f36ea: [2] Container does not exist: container destroyed
Error: failed to restart containers: [5ba0a86f36ea]
Run Code Online (Sandbox Code Playgroud)

但是当我跑步的时候

$ docker logs -f 5ba0a86f36ea
Run Code Online (Sandbox Code Playgroud)

我可以看到日志,所以显然容器确实存在.有任何想法吗?

编辑:

对不起,我忘了提这个:

当我运行时,docker ps -a我看到容器已启动并正在运行.然而,其中的应用程序出现故障,因此我想重新启动它,或者只是在线获取该应用程序的新版本.但是当我无法停止并移除容器时,我也无法启动并运行新的应用程序,这将听取相同的端口.

Ted*_*lay 53

start | restart | stop | rm --force | kill如果容器卡住,所有 docker: 命令可能无法工作。您可以随时重新启动 docker 守护进程。但是,如果您有其他容器在运行,则可能不是这种选择。你可以做的是:

ps aux | grep <<container id>> | awk '{print $1 $2}'
Run Code Online (Sandbox Code Playgroud)

输出包含:

<<user>><<process id>>
Run Code Online (Sandbox Code Playgroud)

然后终止与容器关联的进程,如下所示:

sudo kill -9 <<process id from above command>>
Run Code Online (Sandbox Code Playgroud)

这将杀死容器,您可以使用正确的图像启动一个新容器。

  • 我得到“没有这样的过程” (8认同)
  • 如果您遇到“没有这样的进程”,则“ps aux”很有可能返回您*刚刚运行的命令(“ps aux | grep”) (7认同)
  • 是的,警官,这就是杀死集装箱的人。(谢谢!) (3认同)

Abh*_*yap 52

boot2docker在我的机器里没有.所以,我找到了适合我的东西.

$ sudo systemctl restart docker.socket docker.service
$ docker rm <container id>
Run Code Online (Sandbox Code Playgroud)

检查它是否适合您.

  • 我必须使用强制选项 `docker rm -f &lt;container id&gt;`,但它有效。谢谢。 (4认同)
  • 尝试了其他一切...`sudo systemctl restart docker.socket docker.service`是唯一对我有用的东西。 (3认同)
  • 在 Windows 计算机上,关闭 Docker Desktop,然后从任务管理器停止 Docker.Service。然后重新运行 Docker Desktop。 (2认同)

Von*_*onC 24

看起来像docker/docker/issues/12738,与docker 1.6或1.7一起看到:

某些容器无法正常停止,并重新启动

当我们的用户主机从1.5.0升级到1.6.0时,我们会看到很多这个问题.
升级后,某些容器无法停止(给予500 Server Error: Internal Server Error ("Cannot stop container xxxxx: [2] Container does not exist: container destroyed"))或强制销毁(给予500 Server Error: Internal Server Error ("Could not kill running container, cannot remove - [2] Container does not exist: container destroyed")).进程仍在主机上运行.
有时,它在重新启动docker守护程序后起作用.

有一些解决方法:

我已经尝试了针对该unkillable容器的所有远程API调用,结果如下:

  • json,stats,changes,top,logs返回有效响应
  • stop,pause,wait,kill报404(!)

在我完成远程API之后,我仔细检查了docker ps(容器仍在那里),但后来我重新尝试了docker kill并且它工作了!容器被杀了,我可以把它删除.

要么:

什么工作是boot2docker在我的主机上重新启动.然后docker rm -f

$ boot2docker stop
$ boot2docker start
$ docker rm -f 1f061139ba04
Run Code Online (Sandbox Code Playgroud)

  • `docker rm -f containerId`为我工作 (9认同)
  • 谢谢,是的,重新启动机器有帮助。不幸的是,它是一个服务器,不应该经常重新启动,希望他们能修复这个错误。因为我有 docker 1.7 (2认同)
  • 我有一个不健康的容器,我无法停止或杀死: docker stop -f # 帮助了,谢谢! (2认同)

Jer*_*naw 17

适合使用 Mac 并安装了 Docker Desktop 的任何人。我只需单击托盘图标并说Restart Docker。一旦重新启动就能够删除容器。


Fab*_*hor 10

享受

sudo aa-remove-unknown

这对我有用。

  • 是的,这已成功删除受感染的容器。 (2认同)

小智 10

如果您使用的是 Mac 并通过终端尝试此操作:使用killall Docker退出 Docker。

在应用程序文件夹中或使用open /Applications/Docker.app.

随后您可以docker rm <id>为相关容器运行 a。


dan*_*y74 9

值得知道:

如果您正在运行ENTRYPOINT脚本...该脚本将与shebang一起使用

#!/bin/bash -x
Run Code Online (Sandbox Code Playgroud)

但是会阻止容器停止

#!/bin/bash -xe
Run Code Online (Sandbox Code Playgroud)

  • 原因是什么?我找不到任何参考资料 (2认同)
  • 完全不知道,只是闲逛时发现的 (2认同)

小智 9

使用“top”命令检查是否有僵尸进程。

docker ps | grep <<container name>> 
Run Code Online (Sandbox Code Playgroud)

获取容器 ID。

ps -ef | grep <<container id>>

ps -ef|grep defunct | grep java
Run Code Online (Sandbox Code Playgroud)

并通过 Parent PID 杀死容器。


小智 6

我在 Windows 主机上遇到了同样的问题,这里的其他选项都不适合我。我最终只需要删除位于此处的物理容器文件夹:

C:\ProgramData\Docker\containers\[container guid]
Run Code Online (Sandbox Code Playgroud)

为了安全起见,我首先停止了 docker 服务,当我重新启动它时,损坏的容器现在消失了,我可以创建新的容器。我怀疑在 Linux 主机上同样可以工作,但我不知道容器文件夹在该操作系统上保存在哪里。


Sar*_*sal 5

Ubuntu \n使用其系统进程 ID 停止容器。\n使用以下命令获取主进程 ID:

\n
\n

docker检查-f'{{.State.Pid}}'容器ID

\n
\n

这将返回一个 id 作为 \xc2\xb4 25430 \xc2\xb4。\n使用以下命令杀死它

\n
\n

须藤杀死-9 25430

\n
\n