Docker镜像无法删除,显示“没有这个镜像”。

7

好的,所以我是Docker的新手,在做一些教程,并且想要删除nginxmongo镜像:

$ docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
nginx                latest              be1f31be9a87        12 days ago         109MB
mongo                3.4                 598e8cf490a6        12 days ago         361MB

以下是对nginx的介绍:

$ docker image rm nginx
Untagged: nginx:latest
Untagged: nginx@sha256:9ad0746d8f2ea6df3a17ba89eca40b48c47066dfab55a75e08e2b70fc80d929e
Deleted: sha256:be1f31be9a87cc4b8668e6f0fee4efd2b43e5d4f7734c75ac49432175aaa6ef9
Deleted: sha256:7609c40a03b852382a43d79231d9d4ca7661cd1ac9edcb46f78a44fff4ed59ca
Deleted: sha256:a2b6968c4326640dd5e9e22ddf6cebb61ba1a4b79a4ac8d194f93000c5a4c3e2
Deleted: sha256:8b15606a9e3e430cb7ba739fde2fbb3734a19f8a59a825ffa877f9be49059817

它已经消失了吗?
$ docker image ls
REPOSITORY           TAG                 IMAGE ID            CREATED             SIZE
mongo                3.4                 598e8cf490a6        12 days ago         361MB

到目前为止,一切都很好。现在是关于mongo的部分:
$ docker image rm mongo
Error: No such image: mongo

为什么不起作用?
最终我发现docker image rm 598e8cf490a6确实删除了mongo镜像,但我仍然不明白为什么这不能正常工作。
- 第一列REPOSITORY是什么?那是镜像名称还是其他内容? - 如果它是镜像名称,则为什么我不能使用docker image rm mongo删除mongo镜像? - 如果它不是镜像名称,那么
- 它是什么? - 为什么docker image ls显示它而不是镜像名称? - 如何获取真正的镜像名称?具体是什么?我也尝试过docker image rm mongodbdocker image rm mongo-db都没有成功。

docker image rm mongo:3.4? - Matthieu Brucher
3个回答

7
作为下面的帖子所解释的那样 - https://dev59.com/kmAg5IYBdhLWcg3wU5gS#23736802 图像的一个实例称为容器。您有一张图片,就像您描述的一组层。如果您启动此图像,则拥有此图像的运行容器。您可以拥有许多相同图像的运行容器。 您可以使用docker images查看所有图像,而可以使用docker ps查看正在运行的容器(并且可以使用docker ps -a查看所有容器)。 因此,图像的运行实例是容器。
要查看正在运行的容器实例列表,请使用-> $ docker ps 要查看所有容器实例列表,请使用-> $ docker ps -a 要查看已拉取的映像列表,请使用-> $ docker images 要删除容器实例(如果容器正在运行),请使用-> $ docker kill $ docker rm

或者强制停止并删除容器:

使用 -> $ docker rm -f <容器 ID/容器名称>

要删除容器实例(如果容器未运行):

使用 -> $ docker rm <容器 ID/容器名称>

要删除镜像:

使用 -> $ docker rmi <仓库:标签/镜像 ID>

或者

使用 -> $ docker image rm <仓库:标签/镜像 ID>

注意:如果要删除的仓库有最新的标签,则不需要提及它。如果有标签,则应该提及。

在您的情况下:

使用 -> $ docker images rm mongo:3.4


不行,对我还是不起作用。即使在ls命令中可以看到它直接盯着我,它仍然显示“没有这样的图像”。甚至重新启动了Docker。Portainer也无法删除它。啊哈...也许是因为它是使用旧版本的Docker创建的? - blissweb
使用 docker image inspect <imagename> 命令检查 Docker 镜像的详细信息。尝试使用 docker image prune 命令清理未使用的镜像。 - armourshield

0

Docker中图像的“名称”是仓库和ID的组合 - 这是在docker image ls中显示的内容。

您也可以在Docker Hub上找到仓库名称,例如:https://hub.docker.com/_/mongo/

如果您只提供仓库的名称 - 在这种情况下为“mongo”,则Docker会假定您想要删除标记为该仓库“latest”的图像。现在,由于在您的示例中只有一个标记为“mongo:3.4”的图像,但没有名为“mongo:latest”的图像,因此这不起作用。

您可以通过添加-f标志来强制从一个仓库中删除所有图像,例如:docker rmi -f mongo

有关更多信息和示例,请参见官方文档:https://docs.docker.com/engine/reference/commandline/rmi/#parent-command


“Docker 假设您想删除标记为 'latest' 的镜像”,唉,如果 docker 本身能够解释清楚这一点就好了!“没有这样的镜像:mongo:latest”,是吗? - qntm
docker rmidocker image rm 有什么区别? - qntm
就我而言,“docker rmi”只是“docker image rm”的缩写。您可以在文档中看到“docker image rm”也支持“-f”标志。 - Philipp Ludwig

0
如果您正在使用代理,请尝试:
$ docker image rm your-proxy:port/image-name

或者

$ docker image rm -f your-proxy:port/image-name

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