修复 docker 'unable to delete ...- image is being used by running container'

问题:

你想使用类似这样的命令删除 docker 镜像

docker-image-rm.sh
docker image rm c91b419ac445

但你看到类似这样的错误消息

docker-error.txt
Error response from daemon: conflict: unable to delete c91b419ac445 (cannot be forced) - image is being used by running container 3477a4dcdce2

解决方案

当前有一个正在运行的容器使用你试图删除的镜像。我们将通过先停止容器然后删除镜像来解决此问题

**警告:删除镜像是危险的,因为你无法撤销删除镜像!还要注意强制停止正在运行的容器可能会导致数据丢失,如果该容器正在做重要的事情!

运行这些命令来停止容器并删除镜像:

stop-and-delete-image.sh
# 强制停止容器
docker container rm --force <container ID>
# 删除镜像
docker image rm <image ID>

从原始错误消息的末尾复制 <container ID>(在我的示例中为 3477a4dcdce2)。

从错误消息的开头复制 <image ID>。这与你最初打算删除的镜像 ID 相同(在我的示例中为 c91b419ac445)。

在我的示例中,命令将是

stop-and-delete-image-example.sh
# 强制停止容器
docker container rm --force 3477a4dcdce2
# 删除镜像
docker image rm c91b419ac445

注意可能有多个容器使用此镜像运行,所以如果你继续收到类似的错误消息,你可能需要重复此命令。

背景信息:

Docker 不允许你使用以下命令强制删除镜像

docker-image-rm-force.sh
docker image rm c91b419ac445 --force

正如你从原始错误消息的 (cannot be forced) 子句中也可以看到的。此行为是有意义的,因为如果底层镜像被删除,容器将以未定义的方式崩溃。

注意我们可以在停止容器后使用 docker image rm --force,但这通常不需要,并且可能对其他容器造成额外风险,例如如果其他镜像依赖该镜像。由于 docker 使用分层镜像。阅读我们文章Docker:删除所有镜像和容器的背景信息部分,从镜像管理角度了解 docker 镜像的工作原理。


Check out similar posts by category: Container, Docker