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


76

尝试停止或重新启动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]

但是当我跑步时

$ docker logs -f 5ba0a86f36ea

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

编辑:

抱歉,我忘了提一下:

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


我猜想您可以销毁一个容器,但是当它被销毁时仍然有关于它的日志。否则,您的观察将毫无意义。
ikrabbe

您是否要运行一个包含所有数据和更改的全新容器,还是要从使用的重要文件中获取重要文件?
Paul

如果您的Docker映像没有正确的进程处理,可能会发生这种情况。
Burhan Khalid 2015年

Answers:


36

看起来像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守护程序后可以工作。

有一些解决方法:

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

  • jsonstatschangestoplogs返回有效响应
  • stoppausewaitkill报404(!)

完成远程API后,我docker ps再次检查了该容器(容器仍在那儿),但随后我尝试了docker kill并成功了!该集装箱被杀死,我可以将其卸下。

要么:

有效的方法是boot2docker在主机上重新启动。然后docker rm -f

$ boot2docker stop
$ boot2docker start
$ docker rm -f 1f061139ba04

1
谢谢,是的,重启机器很有帮助。不幸的是,它是一台服务器,不应经常重启,希望他们能够修复该错误。因为我有泊坞窗1.7
彼得,2015年

我同意,这确实是一种解决方法,而不是完整的解决方案。我将监视该错误报告。
VonC

1
我有一个不健康的容器,无法停止或杀死它:docker stop -f#帮助了,谢谢!
sergpank

105

我找不到boot2docker我的机器。因此,我想出了一些对我有用的东西。

$ sudo systemctl restart docker.socket docker.service
$ docker rm -f <container id>

检查它是否也对您有帮助。


1
我不得不使用force选项docker rm -f <container id>,但是它可以工作。谢谢。
chaseisabelle

感谢您的反馈@chaseisabelle。有道理。我将其纳入答案。
Abhishek Kashyap

35

start | restart | stop | rm --force | kill如果容器卡住,则所有docker: 命令都可能不起作用。您始终可以重新启动docker守护程序。但是,如果您正在运行其他容器,则可能不行。您可以做的是:

ps aux | grep <<container id>> | awk '{print $1 $2}'

输出包含:

<<user>><<process id>>

然后像这样终止与容器关联的进程:

sudo kill -9 <<process id from above command>>

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


对我来说结果是kill: illegal process id: [USER][PROCESS_ID]。您知道其他选择吗?
flarkmarup19年

3
我得到No such process
aletede91

12

值得知道:

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

#!/bin/bash -x

但是会阻止容器停止

#!/bin/bash -xe

这是什么原因呢?我找不到任何相关的参考资料
bigbear3001

6

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

docker ps | grep <<container name>> 

获取容器ID。

ps -ef | grep <<container id>>

ps -ef|grep defunct | grep java

并通过父PID杀死容器。



3

我在Windows主机上遇到了相同的问题,这里没有其他选项对我有用。我最后只需要删除物理容器文件夹,该文件夹位于此处:

C:\ProgramData\Docker\containers\[container guid]

为了安全起见,我首先停止了docker服务,当我重新启动它时,损坏的容器现在不见了,我能够创建新的了。我怀疑在Linux主机上也可以使用,但是我不知道容器文件夹在该OS上的位置。


0

如果您使用的是Ubuntu,请确保未将docker-compose安装为snap。这将导致各种随机问题,包括上述问题。

卸下卡扣:

sudo snap remove docker-compose

并从撰写存储库手动安装:

Docker撰写安装说明


0

就我而言,我无法删除使用游牧工作创建的容器,没有输出,docker logs <ContainerID>并且通常看起来像是冻结的。

到现在为止,解决方案是:sudo service docker restart,有人可以提出更好的建议吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.