如何删除 Docker 镜像?

16

我的项目包括一个Dockerfile以构建镜像。我对该Dockerfile进行了修改并希望查看是否有效。因此,我关闭了我的程序,并在PowerShell中使用 docker image ls -a 列出了所有的Docker镜像。然后我使用 docker rmi -f $(docker images -a -q)docker image prune -a 删除了所有未使用的镜像。

但是我的镜像仍然没有被删除,只是被“取消标记”:

Untagged: my_image:latest
Untagged: my_image@sha256:16eb92a476be0...
在尝试删除镜像之前,将停止并删除所有容器。
当我重新启动我的应用程序以构建新的镜像时,旧的镜像仍然在使用:
> docker image ls -a
REPOSITORY                     TAG           IMAGE ID            CREATED      
/my_image                      latest        0d79904a74b0        2 months ago

我该如何在实际操作中删除旧图像,以便我的应用程序可以构建新的图像?


docker ps -a 会显示正在运行该镜像的容器吗?你是如何重启应用程序的(必须删除并重新创建容器以使用不同或更新的镜像)? - David Maze
在尝试删除镜像之前,docker ps -a不会列出任何容器,并且Docker桌面会显示“没有正在运行的容器”。我的程序使用Kubernetes来实例化所需的容器,并在关闭时删除所有容器、Pod和命名空间。 - tdragojevic
1
不需要删除旧的,只需构建新的。展示您构建新图像的步骤和输出。 - BMitch
1个回答

34

首先,您需要删除/停止正在使用您想要删除的镜像的运行容器。

  • docker ps -a: 查看机器上所有正在运行的容器。
  • docker stop <container_id>: 停止一个正在运行的容器。
  • docker rm <container_id>: 删除/移除一个 Docker 容器(仅当它已经停止时)。
  • docker image ls: 查看所有可用镜像的列表,包括它们的标签、镜像 ID、创建时间和大小。
  • docker rmi <image_id>: 删除指定的镜像。
  • docker rmi -f <image_id>: 强制删除 Docker 镜像。
  • docker rm -f (docker ps -a | awk '{print$1}'): 删除机器上所有可用的 Docker 容器。
  • docker image rm <image_name>: 删除指定的镜像。

要删除镜像,您必须删除/停止使用它的所有容器。

  • docker system prune -a: 清理 Docker 环境,删除所有容器和镜像。

谢谢您的回复。我忘记在原问题中提到容器已停止。docker ps -a没有列出任何容器,而Docker桌面告诉我“没有正在运行的容器”。尽管如此,该镜像仍然被取消标记而不是删除。尝试使用docker rmi $(docker images -f “dangling=true” -q)删除所有未标记的镜像,结果什么也没发生。我在这里找到了解释为什么Docker会取消标记镜像的原因,但我不知道如何解决它。 - tdragojevic
@tdragojevic 你可以尝试使用命令 delete rmi -f <image_id> 强制删除 Docker 镜像。 - Sahadat Hossain
2
@tdragojevic 你尝试过使用 docker image prune 或者 docker rmi $(docker images | awk '/^<none>/ {print $3}') 命令来删除未标记的镜像吗? - matt_j
1
@SahadatHossain delete rmi -f <image_id> 应该改为 docker rmi -f <image_id> - Bowen 404

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