无法删除Docker镜像。

3

在设置一个新的构建机器(CentOS 7,Docker CE 17.12.0-ce)时,我进行了一个简单的测试:

docker run -it --rm ubuntu bash

之前一切正常,但现在我无法删除Ubuntu镜像。

[build ~]$ docker image rm ubuntu
Error: No such image: ubuntu
[build ~]$ docker image rm ubuntu:latest
Error: No such image: ubuntu:latest
[build ~]$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              0458a4468cbc        24 hours ago        112MB
[build ~]$ docker rmi 0458a4468cbc
Error: No such image: 0458a4468cbc

它并未被任何容器使用(不过这也不是错误的原因):

[build ~]$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[build ~]$

我甚至尝试了“轰炸策略”:

[build ~]$ docker rmi $(docker images -q)
Error: No such image: 0458a4468cbc

重新启动Docker守护进程:

[build ~]$ sudo systemctl restart docker
[build ~]$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              0458a4468cbc        24 hours ago        112MB
[build ~]$ docker rmi 0458a4468cbc
Error: No such image: 0458a4468cbc

怎么了?虽然Ubuntu镜像存在并不是很重要,但我不明白为什么我不能把它清除。

更新

我尝试重新拉取这个镜像,结果:

docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:e27e9d7f7f28d67aa9e2d7540bdc2b33254b452ee8e60f388875e5b7d9b2b696
Status: Downloaded newer image for ubuntu:latest
[build ~]$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              0458a4468cbc        25 hours ago        112MB
ubuntu              latest              0458a4468cbc        25 hours ago        112MB
[build ~]$ docker image rm ubuntu
Untagged: ubuntu:latest
[build ~]$ docker image ls
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              0458a4468cbc        25 hours ago        112MB
[build ~]$

更新2

在全新安装的CentOS 7 1708上尝试了相同的基本步骤,没有遇到任何问题,因此可以肯定这只是这台机器上某些东西的奇怪一次性损坏。

问题仍然是,我该如何清理它?文件系统中是否有什么我可以直接rm -rf并让docker重新开始?


你尝试过使用 docker images 而不是 docker image ls 吗?虽然我认为两者并没有什么区别。 - fahadash
这看起来像是一个需要报告的问题。你使用的存储驱动是什么?docker info -f '{{ .Driver }}' 你尝试过重新拉取ubuntu镜像吗? - BMitch
驱动程序是 devicemapper。运行 docker images 显示的与 docker image ls 相同。 - superstator
我的驱动程序是overlay2,但出现了相同的问题。 - OrangeDog
4个回答

12

在设置这个系统的时候,我最初安装了一个来自标准CentOS仓库的旧版本的docker (yum install centos),而不是添加docker仓库并安装docker-ce。即使我现在使用的是最新版本,但在升级之前,旧版本必须在/var/lib/docker中引入了一些错误数据。最终,我只是删除了所有本地镜像和容器数据,重新开始了:

sudo systemctl stop docker
sudo rm -rf /var/lib/docker
sudo systemctl start docker

现在一切都正常工作。


这里完全一样,而且你的大招也解决了问题。 - mogul

2

我遇到了类似的问题,当我使用rm -f时,它无法正常工作(无法删除)。

docker rm -f <ImageId> 

我重新启动了Docker引擎,并使用了以下命令,它可以正常工作。

docker image prune -f -a

这留下了一堆列出的图片仍然报告“没有这样的图片”。 - OrangeDog

0

你可以尝试选择要删除的操作系统版本,例如:

docker image rm -f ubuntu:18.04

-2
也许你可以使用 docker image rm -f 。

1
这个答案有什么新的内容,其他答案已经没有提到的吗? - Anton Krug

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