Docker移除<none> TAG映像


138
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

我尝试了以下方法:

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

以及以下内容:

docker rmi $(docker images -f "dangling=true" -q)

得到以下错误:

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

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

Remove one or more images

有点晚了,但我必须为其他用户添加此评论。如果您使用Windows命令提示符,则将无法使用。因为命令提示符不支持内部功能。尝试使用Windows PowerShell的确切线
呃-汉

1
docker rmi $(docker images -a | grep "^<none>" | awk '{print $3}')
OndraŽižka18年

docker rmi $(docker images | grep "<none>" | awk "{print $3}")
大卫,

5
docker rmi $(docker images -f dangling=true -q)
Jinna Balu

@卡尔·莫里森(Karl Morrison):您快到了:只是错过了-a(docker images
all

Answers:


201

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

docker images -q -a | xargs docker inspect --format='{{.Id}}{{range $rt := .RepoTags}} {{$rt}} {{end}}'|grep -v ':'

但是,有些未标记的图像可能需要其他图像。

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

docker rmi $(docker images --filter "dangling=true" -q --no-trunc)

正如我在2016年9月针对“ docker 1.13+”中提到的“ 如何删除旧的和未使用的Docker映像 ”中所述,您还可以执行以下image prune命令

docker image prune

话虽如此,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

诊断步骤

如果使用该--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     

请注意,Paul还提到了Moby问题18892

拉取签名的图像后,<none>docker images”输出中会有一个“额外”条目(带有标记)。
这使rmi图像难以处理(您必须强行使用图像,否则首先删除标记正确的条目,或通过摘要删除)。


5
这并没有<none>为我删除带有标签的图像(例如foo/bar:<none>);我必须使用docker images --digestsdocker rmi foo/bar@<digest>按照success.docker.com/KBase/…
Janaka Bandara,

1
@JanakaBandara谢谢。我已将您的评论包含在答案中(带有一些其他链接)
VonC

对我来说sudo docker rmi $(docker images --filter "dangling=true" -q --no-trunc) Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.35/images/json?filters=%7B%22dangling%22%3A%7B%22true%22%3Atrue%7D%7D: dial unix /var/run/docker.sock: connect: permission denied "docker rmi" requires at least 1 argument. See 'docker rmi --help'. Usage: docker rmi [OPTIONS] IMAGE [IMAGE...] [flags] Remove one or more images
Jamie Hutber '18

@JamieHutber“ docker rmi”至少需要一个参数。这表明泊坞窗图像--filter“ dangling = true” -q --no-trunc不返回任何内容,这意味着没有悬挂的图像?
VonC

感谢VonC实际上它没有hutber@hutber-blade /var/www/dockerfile-wizard $ sudo docker images --filter "dangling=true" -q --no-trunc sha256:c58f4e4b10b1f862d78f96e90bdf13ffe37993279d0992be46d5c15dad51421e sha256:db28e821bc3f337caf711a664bc529be5db8894dd73c5b013ad814cc1e9fc21b sha256:257936750a7d43ae77c713c2cb18342be935de7d3b8fad23d6664fc64acfe753 sha256:6b815cefeb527885b2b9dd831f7f40b05942f00d1367274833a6274154d8ce43
杰米Hutber

42
docker images | grep none | awk '{ print $3; }' | xargs docker rmi

您可以尝试一下


1
对我来说最快,最简单的解决方案
标记

必须--force在末尾添加。因此该命令将看起来像 docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force
Munim Dibosh


6

你可以去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

5

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

$ docker images -f "dangling=true"

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

$ docker rmi $(docker images -f "dangling=true" -q) --force

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


1
这与在2015年的回答中所提出的建议相似吗?
VonC

5

您可以检查过滤器“悬挂”是否不再起作用

$ docker images -f “dangling=true” -q
Error response from daemon: Invalid filter 'dangling'

使用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]

您可以使用--force不提示进行确认

$ docker system prune --force

4

我发现docker image prune -f最有用,并且在日常工作中一直使用它,使用标签-f不会提示您进行确认。在这里更多细节


4

只需运行以下命令:

docker image prune --filter="dangling=true"

3

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

docker rmi $(docker images | grep "^<none" | awk '{print $3}')

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

docker rmi $(docker images | grep "none" | awk '{print $3}')


2

docker system prune 会成功的,它将删除

- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache

但是请谨慎使用!


2

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

docker rm $(docker ps -a -q)

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

docker image prune


1

以下命令对我有用。这只是简单的grep“”图片,并获取docker图片ID并删除了所有图片。简单的单个命令。

docker rmi $(docker images |grep "<none>"| awk '{print $3}')


1

这是tansadio答案的扩展:

如果出现以下错误:

Error response from daemon: conflict: unable to delete <> (must be forced) - image is being used by stopped container <>

您可以使用以下命令强制使用--force

docker images | grep none | awk '{ print $3; }' | xargs docker rmi --force

1

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

docker rmi $(docker images | grep none | awk '{print $3}')

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

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


0

简单明了

甚至我花了3天的时间来理解这个简单明了的错误。

Docker镜像未成功构建

Step 7/13 : COPY jupyter_notebook_config.py /root/.jupyter/
 ---> bf29ce6fe6dc
Step 8/13 : COPY notebooks /notebooks
COPY failed: stat /var/lib/docker/tmp/docker-builder776981166/notebooks: no such file or directory
anarchist@anarchist-desktop:~/Documents/sam/dockerDem$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              bf29ce6fe6dc        9 seconds ago       1.27GB
ubuntu              16.04               a51debf7e1eb        3 weeks ago         116MB

然后我从Dockerfile中删除了第8行,这次是成功的信号。

Successfully built b6724370f8ca
Successfully tagged dem:expo
anarchist@anarchist-desktop:~/Documents/sam/dockerDem$ docker run -it -p 8888:8888 dem:expo
[I 06:11:38.984 NotebookApp] Writing notebook server cookie secret to /root/.local/share/jupyter/runtime/notebook_cookie_secret
[I 06:11:39.011 NotebookApp] Serving notebooks from local directory: /
[I 06:11:39.011 NotebookApp] The Jupyter Notebook is running at:
[I 06:11:39.011 NotebookApp] http://(296d81166725 or 127.0.0.1):8888/?token=496feb282ef749c05277ef57a51e8a56fedb1c6b337b9f92

它说成功标记了dem:expo,这一行在docker进程中是imp。


0

docker rmi -f $(docker images -a | awk'NR> 1 && $ 2 ==“” {print $ 3}')


0

所有

为Windows爱好者共享PowerShell命令(以防万一您没有bash,grep或awk)

(docker images) -like '*<none>*' | ForEach-Object { 
  $imageid=($_ -split "\s+")[2]
  docker rmi -f $imageid
}


0

删除所有退出的容器

docker rm $(docker container ls -a -f status=exited -q)

或根据模式取出容器

docker images -a | grep "pattern" | awk '{print $3}' | xargs docker rmi

0

尝试此操作以查看带有标签的docker镜像ID <none>

docker images -a | awk '/^<none>/ {print $3}'

然后您可以删除带有标签的所有图像<none>。这对我有用。

docker rmi $(docker images -a | awk '/^<none>/ {print $3}')




-2

悬空的图像是以前构建和提取的鬼影,只需使用以下命令将其删除: docker rmi $(docker images -f“ dangling = true” -q)


OP指出,他确实已经尝试了此确切命令,但失败了。而且,已经至少两次给出了此答案。
CaringDev

-5
docker rmi $(docker images -a -q)

说明以下图像在使用中。我认为此命令摆脱了不需要的图像。


2
这不会删除所有图像吗?
marianobianchi

3
这会删除所有未使用的图像,因此不应将其标记为正确答案。
Ghashange
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.