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

时间:2015-07-12 08:19:16

标签: 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]

但是当我跑步时

$ docker logs -f 5ba0a86f36ea

我可以看到日志,所以显然容器确实存在。有什么想法吗?

修改

抱歉,我忘了提到这个:

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

13 个答案:

答案 0 :(得分:38)

我的机器中没有{p> boot2docker。所以,我发现了一些对我有用的东西。

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

检查它是否适合您。

答案 1 :(得分:19)

看起来像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调用,结果如下:

     
      
  • jsonstatschangestoplogs返回了有效回复
  •   
  • stoppausewaitkill报告了404(!)
  •   
     

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

或者:

  

在我的主机上重启boot2docker的作用是什么。然后docker rm -f

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

答案 2 :(得分:8)

值得知道:

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

#!/bin/bash -x

但是会阻止容器停止

#!/bin/bash -xe

答案 3 :(得分:6)

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

docker ps | grep <<container name>> 

获取容器ID。

ps -ef | grep <<container id>>

ps -ef|grep defunct | grep java

然后通过父PID杀死容器。

答案 4 :(得分:5)

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

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

输出包含:

<<user>><<process id>>

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

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

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

答案 5 :(得分:2)

享受

sudo aa-remove-unknown

这对我有用。

答案 6 :(得分:2)

对于 Mac 上安装了 Docker 桌面的任何人。我只需点击托盘图标并说 Restart Docker。重新启动后就可以删除容器了。

答案 7 :(得分:0)

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

^\s*\[ProducesResponseType.*\n

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

答案 8 :(得分:0)

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

删除快照:

sudo snap remove docker-compose

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

Docker compose installation instruction

答案 9 :(得分:0)

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

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

答案 10 :(得分:0)

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

在 Applications 文件夹中或使用 open /Applications/Docker.app 重新启动它。

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

答案 11 :(得分:0)

就我而言,docker rm $(docker ps -aq) 对我有用。

答案 12 :(得分:-2)

如果其他所有方法均失败,则可以在Windows上卸载docker桌面,并在Mac上卸载该容器以停止该容器。

我之前杀死了所有docker桌面进程。.但是我不知道这是否必要。