Docker rmi – 可以使用–force吗?

我对Docker来说比较陌生,最近我开始运行Ubuntu容器,并在几天后正常停止它(我没有看到它使用“docker ps”)。 当我试图删除使用Ubuntu的图像

docker rmi ubuntu 

我得到了以下错误:

来自守护进程的错误响应:冲突:无法移除存储库引用“ubuntu”(必须强制) – 容器65c315b169b8正在使用其引用的映像747cb2d 60bbe

我可以使用“ – 强制”强制删除图像,

 docker rmi ubuntu --force 

还是有一个优雅/安全的方式来做到这一点?

默认情况下, docker ps只会显示正在运行的容器。 你可以使用docker ps --all来显示停止的。

然后,您可以先使用docker rm <IMAGE_ID>删除容器

如果你想删除所有的容器,停止与否,你可以通过bash提示符来实现

 $ docker rm $(docker ps -all -q) 

-q开关只返回ID

如果你想优雅地做,你应该find是否有其他图像使用Ubuntu的。 无论如何,在你的情况下,你有一个与该图像相关的容器。

这是一个关于如何得到这个的示例脚本:

 containerId=$( docker container ls -a | grep ubuntu | awk '{ print $1 }' ) docker container rm $containerId docker image rm ubuntu 

Docker不会将图像数据复制到每个容器,所有运行图像的容器都只有一个指向文件系统部分的指针(带有各自容器的本地RW层)。 所以如果你在容器使用的时候删除了一个图像,那么你将会破坏容器并覆盖它所依赖的文件系统。

相反,只需先移除容器。 它可能会退出而不是运行,所以你可以做一个docker ps -a | grep $image_id docker ps -a | grep $image_id获取运行该特定图像ID的容器的快速列表,但首选列表将包含任何后代:

 docker rm $(docker ps -aq --filter "ancestor=747cb2d60bbe") 

然后你将能够运行你的docker rmi命令。