如何删除Docker的图像?

ale*_*z78 256 docker

我有以下图片:

alex@alexvps:~$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>              <none>              70c0e19168cf        5 days ago          1.069 GB
<none>              <none>              c2ce80b62174        8 days ago          399.2 MB
<none>              <none>              60afe4036d97        8 days ago          325.1 MB
Run Code Online (Sandbox Code Playgroud)

当我尝试删除其中一个时,我得到:

alex@alexvps:~$ sudo docker rmi 60afe4036d97
Error: Conflict, 60afe4036d97 wasn't deleted
2014/01/28 00:54:00 Error: failed to remove one or more images
Run Code Online (Sandbox Code Playgroud)

我该如何删除它们?为什么会有这样的冲突?

小智 469

要删除所有图像,请使用给定的命令

docker rmi $(docker images -q)
Run Code Online (Sandbox Code Playgroud)

要删除所有容器,请使用给定的命令

docker rm $(docker ps -a -q)
Run Code Online (Sandbox Code Playgroud)

警告:这将破坏您的所有图像和容器.恢复它们是不可能的!

此解决方案由Techoverflow.net提供.

  • windows powershell等效于`docker images -q | %{docker rmi -f $ _}` (36认同)
  • 简单直接.您还可以在命令下方强行删除图像.'docker rmi -f $(docker images -q)' (17认同)
  • 正如 @alexyz78 下面所指出的,您现在可以使用“docker system prune”。因此,要擦除所有内容:`docker Kill $(docker ps -q)`来停止容器,然后使用`docker system prune -a`将删除所有内容 - 请参阅/sf/answers/3101630801/ (2认同)

Jir*_*iri 98

可能的原因: 原因可能是此图像当前由正在运行的容器使用.在这种情况下,您可以列出正在运行的容器,停止相关容器,然后删除该图像:

docker ps
docker stop <containerid>
docker rm <containerid>
docker rmi <imageid>
Run Code Online (Sandbox Code Playgroud)

如果您无法通过docker ps找到容器,则可以使用此列表列出所有已退出的容器并将其删除.

docker ps -a | grep 60afe4036d97
docker rm <containerid>
Run Code Online (Sandbox Code Playgroud)

注意: 如果使用容器,请小心一次删除所有已退出的Volume-Only容器.这些保持Exit状态,但包含有用的数据.

  • 我能够用`sudo docker ps -a |删除图像 grep退出| awk'{print $ 1}'| sudo xargs docker rm`(感谢https://github.com/dotcloud/docker/issues/3258)然后使用`sudo docker rmi 70c0e19168cf` (12认同)
  • 小心删除"退出"状态下的图像.如果您使用的是仅限数据卷的容器,则它们不会继续运行. (2认同)

eld*_*dos 60

出错的原因是即使图像没有任何标记,仍然存在在该图像上创建的容器,该容器可能处于该exited状态.因此,您需要确保已停止并删除在这些图像上创建的所有容器.以下命令可帮助您删除所有未运行的容器:

docker rm `docker ps -aq --no-trunc --filter "status=exited"`
Run Code Online (Sandbox Code Playgroud)

现在,这将删除所有悬空的非中间<none>图像:

docker rmi `docker images --filter 'dangling=true' -q --no-trunc`
Run Code Online (Sandbox Code Playgroud)

注意:要停止所有正在运行的容器:

docker stop `docker ps -q`
Run Code Online (Sandbox Code Playgroud)

  • 如果您有数据量容器,请小心,因为它们具有"status = exited".这意味着您将丢失所有数据. (7认同)

mar*_*ell 19

在Bash:

for i in `sudo docker images|grep \<none\>|awk '{print $3}'`;do sudo docker rmi $i;done
Run Code Online (Sandbox Code Playgroud)

这将删除名为"<none>"的所有图像.我发现那些图像是多余的.

  • 使这个命令简单`docker images | grep\<none \> | awk'{print $ 3}'| xargs docker rmi`,它可能需要`sudo`权限 (5认同)
  • 这不回答问题,但它仍然非常有用.谢谢. (3认同)

mad*_*adx 19

图像当前可以由正在运行的容器使用,因此您首先必须停止并删除容器.

docker stop <container-name>
docker rm <container-id>
Run Code Online (Sandbox Code Playgroud)

然后你可以尝试删除图像:

docker rmi <image-id>
Run Code Online (Sandbox Code Playgroud)

您必须确保此图像不依赖于其他图像(否则您必须先删除它们).

我有一个奇怪的情况,我没有更多的容器仍然活着(docker ps -a什么也没有返回),但我无法删除图像及其图像依赖.

要解决这些特殊情况,您可以使用以下方法强制删除图像:

docker rmi -f <image-id>
Run Code Online (Sandbox Code Playgroud)


小智 15

我在这个命令中找到了答案:

docker images --no-trunc | grep none | awk '{print $3}' | xargs docker rmi
Run Code Online (Sandbox Code Playgroud)

当我删除一些正在使用的图像时,我遇到了问题,我没有意识到(使用docker ps -a).


ale*_*z78 9

自从Docker ver.1.13.05(2017年1月)有system prune命令:

$ docker system prune --help

Usage:  docker system prune [OPTIONS]

Remove unused data

Options:
-a, --all     Remove all unused images not just dangling ones
-f, --force   Do not prompt for confirmation
    --help    Print usage
Run Code Online (Sandbox Code Playgroud)


小智 6

首先,使用以下命令删除所有容器

sudo docker ps -a -q | xargs -n 1 -I {} sudo docker rm {}
Run Code Online (Sandbox Code Playgroud)

然后,使用以下命令通过其ID删除映像

sudo docker rmi <image-id>
Run Code Online (Sandbox Code Playgroud)


小智 5

只需--force在命令末尾添加aadd 即可。喜欢:

sudo docker rmi <docker_image_id> --force
Run Code Online (Sandbox Code Playgroud)

为了使其更智能,您可以添加:

sudo docker stop $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rm $(docker ps | grep <your_container_name> | awk '{print $1}')

sudo docker rmi $(docker images | grep <your_image_name> | awk '{print $3}') --force
Run Code Online (Sandbox Code Playgroud)

这里的docker ps$1 是第一列,即 Docker 容器 ID。

docker images$3 是第三列,即 Docker 镜像 ID。


Dyl*_*lan 5

使用

docker image prune -all
Run Code Online (Sandbox Code Playgroud)

或者

docker image prune -a
Run Code Online (Sandbox Code Playgroud)

删除所有悬空图像。如果-a指定,它还将删除任何容器未引用的所有图像。

注意:在修剪删除任何内容之前,系统会提示您进行确认,但不会向您显示可能删除的内容的列表。此外,docker image ls不支持负过滤,因此很难预测哪些图像将被实际删除。

如Docker 的 prune 文档所述。


小智 5

除了Sunny的答案:

为了在PowerShell窗口中删除 Windows机器(使用Docker for Windows)上的所有映像,请执行以下操作:

docker images -q | %{docker rmi -f $_}
Run Code Online (Sandbox Code Playgroud)

为了在PowerShell窗口中删除 Windows机器上的所有容器(使用Docker for Windows),请执行以下操作:

docker ps -a -q | %{docker rm -f $_}
Run Code Online (Sandbox Code Playgroud)