Docker - 无法删除已停止的容器

104

我无法删除已停止的容器,每当我重新启动Docker服务后它就会再次出现。

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead

那么

docker rm -f 11667ef16239

然后,当我运行了docker ps -a命令时,没有显示任何Docker容器。

docker ps -a
CONTAINER ID         STATUS

但是,当我重新启动docker服务时:

service docker restart

再次运行docker ps -a命令:

docker ps -a
CONTAINER ID         STATUS          
11667ef16239         Dead

3
你好,这仍然是一个当前问题,但目前被接受的答案不再有效,并且存在相当大的风险。有umount的答案,是一个很好的选择,如果可能的话,请接受那个答案。 - Daniel F
“umount” 的解决方案已经不可行了,因为它不允许在资源被占用时卸载。同样地,杀死负责的 pid 也无法解决问题。 - runr
26个回答

6

我尝试了上面的建议,但没有起作用。

然后:

  1. 我尝试了命令:docker system prune -a,第一次没有起作用。
  2. 我重新启动了系统。
  3. 我再次尝试了docker system prune -a。这次它起作用了。它会发送一个警告信息,并最终询问“您确定要继续吗?y/n? ”回答:y 。它需要一些时间,最后所有不活跃的容器都将被删除。
  4. 使用docker ps -a进行验证。

重要提示 - 这是一个“核选项”,因为它会销毁所有容器和镜像。


这对我有用。谢谢!我还不得不重新启动系统。 - pandasCat

4

对于未来的用户,我想分享我的经验:(2023)

为了查看所有容器,我运行了以下命令

docker container ls -a

然后我运行以下命令来杀死容器:

docker rm -f YOUR_CONTAINER_ID

例如:
docker rm -f d389s8dffe

4

对于Windows:

del D:\ProgramData\docker\containers\{CONTAINER ID}
del D:\ProgramData\docker\windowsfilter\{CONTAINER ID}

然后重新启动Docker Desktop


2

尝试一下,这对我有用:

$ docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
4f13b53be9dd        5b0bbf1173ea        "/opt/app/netjet..."   5 months ago        Dead                                    appname_chess

$ docker rm $(docker ps --all -q -f status=dead)
Error response from daemon: driver "devicemapper" failed to remove root filesystem for 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440: failed to remove device 487b4b73c58d19ef79201cf6d5fcd6b7316e612e99c14505a6bf24399cad9795-init: devicemapper: Error running DeleteDevice dm_task_run failed

su
cd /var/lib/docker/containers
[root@localhost containers]#  ls -l
total 0
drwx------. 1 root root 312 Nov 17 08:58 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
[root@localhost containers]# rm -rf 4f13b53be9ddef3e9ba281546aef1c544805282971f324291a1dc91b50eeb440
systemctl restart docker

2

尝试这个方法,对我有效:

最初的回答:

docker rm -f <container_name>

eg. docker rm -f 11667ef16239

2
尝试杀掉它,然后移除 >:) (即)
docker kill $(docker ps -q)

1
这里有很多答案,但没有一个涉及到我使用的(快速)解决方案。
我正在使用 Docker 版本 1.12.3,构建版本为 6b644ec。
我只需运行 docker rmi <image-name> 来删除死亡容器所在的镜像。然后运行 docker ps -a,死亡容器就完全消失了。
当然,我只需重新拉取镜像并再次运行容器。
我不知道它是如何处于这种状态的,但事实就是如此...

1

摆脱死亡容器进程的最佳方法是重新启动您的Docker服务。 由于一个容器被卡在重启状态中,我无法删除它,所以我只需重新启动Docker服务即可解决问题。


1
在我的情况下,我必须使用以下代码将其删除:
rm -r /var/lib/docker/containers/<container-id>/

它起作用了。也许这就是您在docker版本~19中解决它的方式。我的docker版本是19.03.12


0

在Centos7和Docker 1.8.2上运行时,我无法使用Zgr3doo的解决方案通过devicemapper卸载(我认为我得到的响应是该卷未被挂载/找到)。

我认为我也遇到了类似的问题,来自sk8terboi87 ツ 的答案:我相信消息是卷无法卸载,并且它列出了尝试卸载以删除死容器的特定卷。

对我有效的是先停止docker,然后手动删除目录。我能够通过前一个命令的错误输出确定它们是哪些。

以上是模糊描述的道歉。处理死容器几天后,我才发现这个SO问题。 ...但是,今天我注意到了类似的模式:

$ sudo docker stop fervent_fermi; sudo docker rm fervent_fermi fervent_fermi
Error response from daemon: Cannot destroy container fervent_fermi: Driver devicemapper failed to remove root filesystem a11bae452da3dd776354aae311da5be5ff70ac9ebf33d33b66a24c62c3ec7f35: Device is Busy
Error: failed to remove containers: [fervent_fermi]

$ sudo systemctl docker stop
$ sudo rm -rf /var/lib/docker/devicemapper/mnt/a11bae452da3dd776354aae311da5be5ff70ac9ebf33d33b66a24c62c3ec7f35
$

我注意到,当使用这种方法时,Docker 会使用不同的名称重新创建镜像:

a11bae452da3     trend_av_docker   "bash"   2 weeks ago    Dead    compassionate_ardinghelli

这可能是由于容器被发出了restart=always的命令,然而,容器ID与之前使用我强制删除的卷的容器ID相匹配。删除这个新容器没有任何困难:

$ sudo docker rm -v compassionate_ardinghelli
compassionate_ardinghelli

1
备选方案2:重新将此内容改编为独立的答案。在这个过程中可以引用其他答案,但请具体指明你所引用的答案,例如作者的名字。以“我还不能发表评论......”开头的帖子几乎肯定会被删除。如果你有一些有用的回答要添加 - 就去做吧!(并且努力获得额外的9个声望分!)祝你好运。 - Mogsdad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接