尝试停止或重新启动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
时,我看到容器已启动并正在运行。然而,其中的应用程序出现故障,所以我想重新启动它,或者只是在线获得该应用程序的新版本。但是,当我无法停止并移除容器时,我也无法启动并运行新的应用程序,这将听取相同的端口。
答案 0 :(得分:38)
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调用,结果如下:
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
答案 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
并从撰写存储库手动安装:
答案 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桌面进程。.但是我不知道这是否必要。