Docker rmi - 可以使用--force吗?

时间:2017-10-30 09:30:19

标签: docker

我对Docker很新,我最近开始运行ubuntu容器,并在几天后优雅地停止它(我没有看到它使用" docker ps")。当我尝试使用

删除ubuntu图像时
docker rmi ubuntu

我收到以下错误:

  

来自守护程序的错误响应:冲突:无法删除存储库引用" ubuntu" (必须强制) - 容器65c315b169b8正在使用其引用的图像747cb2d   60bbe

我可以使用" - force"强行删除图像,

docker rmi ubuntu --force

或者有一种优雅/更安全的方式吗?

8 个答案:

答案 0 :(得分:4)

默认情况下,docker ps仅显示正在运行的容器。您可以使用docker ps --all显示已停止的内容。

然后,您可以先使用docker rm <CONTAINER_ID>

删除容器

如果要删除所有容器,无论是否已停止,都可以使用

从bash提示符中实现此目的
$ docker rm $(docker ps -all -q)

-q开关仅返回ID

*编辑不允许一个字符编辑,所以在这里你去

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

答案 1 :(得分:3)

由于其他所有人似乎都不愿意测试但愿意宣讲,所以我决定自己测试一下:

  • 我下载了新图像,所以我知道它没有被使用
  • 我运行了一个新容器
  • 我使用docker rmi --force <name>
  • 删除了图片
  • 图片仅未加标签,未删除
  • 我无法使用docker rmi --force <ID>删除图像,因为docker责备了“正在运行容器922a12161de6使用图像”

结果是:

  • 当您命名图像时,该图像将不加标签,但是Docker(至少是我使用的版本,版本为19.03.5,版本633a0ea)足够聪明,无法在使用图层时实际删除它们。
  • 结果,由于各层仍然存在,因此容器继续正常运行,它们只是未加标签。您可以docker rmi <ID>docker images prune(没有-a的话,它只会删除“悬挂”的图像,即不包括未使用的图像)。

因此答案是“是的,但是如果您希望这样做,它将不会删除容器”,但是现在您知道了原因

我不满意其他大多数答案如何告诉您找到正在运行的容器,因为它们似乎在说“列出所有图像”-为什么?您正在尝试删除特定图像。

Stefano的答案更准确,但是需要一些调整:

imageName=ubuntu
containerIds=$(docker ps -a | grep "$imageName" | awk '{ print $1 }')
docker stop $containerIds
docker rm $containerIds
docker rmi "$imageName"

基本上,我为图​​像naem添加了一个变量和一个停止步骤。

答案 2 :(得分:1)

如果你想优雅地做,你应该找到使用ubuntu的其他图像。在你的情况下,你有一个与该图像相关的容器。

以下是有关如何获取此内容的示例脚本:

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

答案 3 :(得分:1)

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

相反,只需先移除容器即可。它可能会退出而不是运行,因此您可以使用docker ps -a | grep $image_id来快速列出运行该特定图像ID的容器,但首选列表将包含任何后代:

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

然后您就可以运行docker rmi命令。

答案 4 :(得分:1)

如果要删除所有未使用的映像,可以尝试使用docker映像提供的prune选项。

https://docs.docker.com/engine/reference/commandline/image_prune/#usage

  

docker image prune -a

答案 5 :(得分:1)

这些是 docker 查看和删除内容的基本有用命令。

  1. 查看所有 docker 镜像:docker image ls

  2. 查看 docker 容器:docker ps

  3. 停止 docker 容器:docker stop <container name>

  4. 移除 docker 容器:docker rm <container name>

  5. 删除泊坞窗图像:docker rmi image <image name>

  6. 删除除当前镜像之外的 Docker 镜像 - docker image prune -a

答案 6 :(得分:0)

删除所有容器并在所有图像之后赢得一些空间!

$ docker rm $(docker ps -all -q)
$ docker rmi $(docker image ls -q)

答案 7 :(得分:0)

何时删除docker映像

  1. 当它们的磁盘空间不足时,
  2. 他们肯定知道自己不需要图像,或者以后可以在需要时随时从互联网上下载

因此,如果您可以访问互联网并且遇到磁盘空间问题,则可以强制删除图像

为什么会出现错误:

Docker认为有一个docker-当前已停止-正在使用此映像。如果删除此已停止的docker,则“ docker rmi”将在没有强制的情况下工作