Docker删除<none> TAG图像

Kar*_*son 91 docker

root@server:~# docker images -a        
REPOSITORY              TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
<none>                  <none>              5e2dfc857e73        5 days ago          261.6 MB
<none>                  <none>              d053e988f23d        5 days ago          261.6 MB
<none>                  <none>              1d5d4a2d89eb        5 days ago          261.6 MB
<none>                  <none>              ea0d189fdb19        5 days ago          100.5 MB
<none>                  <none>              26c6175962b3        5 days ago          100.5 MB
<none>                  <none>              73d5cec4a0b3        5 days ago          100.5 MB
<none>                  <none>              e19590e1bac1        5 days ago          100.5 MB
Run Code Online (Sandbox Code Playgroud)

我尝试过以下方法:

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")
Run Code Online (Sandbox Code Playgroud)

以下内容:

docker rmi $(docker images -f "dangling=true" -q)
Run Code Online (Sandbox Code Playgroud)

收到以下错误:

docker: "rmi" requires a minimum of 1 argument.
See 'docker rmi --help'.

Usage:  docker rmi [OPTIONS] IMAGE [IMAGE...]

Remove one or more images
Run Code Online (Sandbox Code Playgroud)

Von*_*onC 125

您可以尝试仅列出未标记的图像(没有标签的图像,或没有标记的标签):

docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'
Run Code Online (Sandbox Code Playgroud)

但是,其他人可能需要其中一些未标记的图像.

我更喜欢只删除悬空图像:

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

正如我在2016年9月的" 如何删除旧的和未使用的Docker镜像 "中提到的docker 1.13+ ,您也可以执行以下image prune命令:

docker image prune
Run Code Online (Sandbox Code Playgroud)

话虽如此,Janaka Bandara 在评论中提到:

这并没有<none>为我删除标签图像(例如foo/bar:<none>); 我不得不使用docker images --digestsdocker rmi foo/bar@<digest>

Janaka参考Paul V. Novarese的 " 如何删除带标记的签名图像 " :

# docker images
REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
pvnovarese/mprime        latest              459769dbc7a1        5 days ago          4.461 MB
pvnovarese/mprime        <none>              459769dbc7a1        5 days ago          4.461 MB
Run Code Online (Sandbox Code Playgroud)

诊断步骤

如果使用该--digests=true选项,则可以看到这两个条目的区别(未标记的条目具有Docker Content Trust签名摘要):

# docker images --digests=true
REPOSITORY               TAG                 DIGEST                                                                    IMAGE ID            CREATED             SIZE
pvnovarese/mprime        latest              <none>                                                                    459769dbc7a1        5 days ago          4.461 MB
pvnovarese/mprime        <none>              sha256:0b315a681a6b9f14f93ab34f3c744fd547bda30a03b55263d93861671fa33b00   459769dbc7a1        5 days ago     
Run Code Online (Sandbox Code Playgroud)

请注意,保罗还提到了18892年的moby问题:

拉出已签名的图像后,<none>" docker images"输出中有一个"额外"条目(带标记).
这使得rmi图像变得困难(您必须强制它,否则首先删除正确标记的条目,或通过摘要删除.

  • 这并没有为我删除带有&lt;none&gt;标签的图像(例如foo / bar:&lt;none&gt;);我必须使用https://success.docker.com/KBase/How_to_Remove_a_Signed_Image_with_a_%3Cnone%3E_Tag中所述的`docker images --digests`和`docker rmi foo / bar @ &lt;digest&gt;` (2认同)

kes*_*ami 25

这对我来说有效

docker image rm -f $(docker images -f dangling=true -q)
Run Code Online (Sandbox Code Playgroud)


小智 21

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

你可以这么简单地试试

  • 必须向 docker 镜像添加一个 `-a` 才能使其工作:`docker images -a | grep 无 | awk '{ 打印 $3; }' | xargs docker rmi --force`。 (5认同)
  • 必须在最后添加`--force`。所以命令看起来像 - `docker images | grep 无 | awk '{ 打印 $3; }' | xargs docker rmi --force` (2认同)

Rag*_*nar 17

只需运行此命令:

docker image prune --filter="dangling=true"
Run Code Online (Sandbox Code Playgroud)

  • 这应该是正确的答案@basickarl (2认同)

her*_*erm 12

docker image prune删除所有悬空图像(标记为none的图像).docker image prune -a还会删除没有使用它们的容器的任何图像.

此stackoverflow线程中解释了悬空和未使用图像之间的区别.


Ozz*_*ech 11

根据docker 文档,您只能列出未标记(悬空)的图像

$ docker images -f "dangling=true"
Run Code Online (Sandbox Code Playgroud)

并将它们重定向到这样的docker rmi命令:

$ docker rmi $(docker images -f "dangling=true" -q) --force
Run Code Online (Sandbox Code Playgroud)

注意-qparam 仅显示容器的数字 ID。

  • 是不是和我 2015 年在[我的回答](/sf/answers/2373959801/) 中提出的类似? (2认同)

yev*_*niy 10

要删除所有图像,none我们必须确保删除了所有可以运行的已停止容器:

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

然后我们可以删除所有图像:

docker image prune
Run Code Online (Sandbox Code Playgroud)


Jer*_*ony 9

none使用以下命令删除具有存储库名称的图像:

docker rmi $(docker images | grep "^<none" | awk '{print $3}')
Run Code Online (Sandbox Code Playgroud)

删除具有none标签或存储库名称的图像:

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


小智 9

首先使用 docker container prune 删除所有停止的容器,然后使用 docker image prune 删除所有悬空的镜像。

docker container prune
docker image prune
Run Code Online (Sandbox Code Playgroud)


nPc*_*omp 8

以下将删除所有<none>图像

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

您可以通过更改为强制删除,docker rmidocker rmi -f我不建议这样做。

某些<none>图像可能与其他图像相关,因此为了安全起见,请勿使用-f标签。


Jho*_*los 8

第一个解决方案:

  1. 首先删除不使用的容器。

    docker ps -a | grep -v Up | awk '{ print $1; }' | xargs docker rm
    
    Run Code Online (Sandbox Code Playgroud)
  2. 删除所有没有标签的容器。

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

第二种解决方案删除全部:

$ docker system prune -a


WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all images without at least one container associated to them
- all build cache

Are you sure you want to continue? [y/N]
Run Code Online (Sandbox Code Playgroud)


GHE*_*iLD 7

你可以去docker rmi $(docker images -f "dangling=true" -q)。有关更多选项,请参阅图像文档

$ docker images
REPOSITORY                  TAG                 IMAGE ID            CREATED             SIZE
<none>                      <none>              94870cda569b        4 seconds ago       673MB
python                      2.7                 320a06f42b5f        10 days ago         673MB
mysql                       latest              e799c7f9ae9c        2 months ago        407MB
gcavalcante8808/semaphore   latest              86e863e11461        2 months ago        537MB
redis                       latest              e32ef7250bc1        2 months ago        184MB
rabbitmq                    3.6.9-management    7e69e14cc496        2 months ago        179MB
rabbitmq                    3.6.9               eb2e4968538a        2 months ago        179MB
jordan/rundeck              latest              6d40b57b1572        2 months ago        660MB
rabbitmq                    3.5.6-management    dbfe8d18809a        19 months ago       304MB

$ docker rmi $(docker images --format '{{.ID}}' --filter=dangling=true)
Deleted: sha256:94870cda569b8cf5f42be25af107d464c993b4502a1472c1679bf2d213b6c0a6
Run Code Online (Sandbox Code Playgroud)


Che*_*ana 7

您可以检查过滤器 'dangling' 是否不再起作用

$ docker images -f “dangling=true” -q
Error response from daemon: Invalid filter 'dangling'
Run Code Online (Sandbox Code Playgroud)

使用docker system prune删除悬空图像

$ docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all dangling build cache
Are you sure you want to continue? [y/N]
Run Code Online (Sandbox Code Playgroud)

您可以--force用于不提示确认

$ docker system prune --force
Run Code Online (Sandbox Code Playgroud)


Raf*_*sin 7

docker rmi --force $(docker images -q --filter "dangling=true")
Run Code Online (Sandbox Code Playgroud)


小智 7

你可以在 docker 中使用这个命令:

docker image prune
Run Code Online (Sandbox Code Playgroud)

对于所有容器:

docker container prune
Run Code Online (Sandbox Code Playgroud)


jus*_*ais 6

我发现docker image prune -f最有用,并且我在日常工作中一直使用它,使用标签-f不会提示确认。更多详情请点击这里


小智 6

删除悬空 ( <none>) 图像的最简单的解决方案应该是:

docker image prune
Run Code Online (Sandbox Code Playgroud)

您可以选择添加--force-f禁用提示。


Raj*_*ath 5

docker system prune就可以了,它会删除

- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Run Code Online (Sandbox Code Playgroud)

但使用它,要小心!