Docker删除<none> TAG图像

时间:2015-11-25 09:39:19

标签: 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

我尝试了以下内容:

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

30 个答案:

答案 0 :(得分:85)

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

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

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

I prefer removing only dangling images

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

正如我在2016年9月的“How to remove old and unused Docker images”中为docker 1.13+所提到的那样,您也可以执行image prune command

docker image prune

话虽如此,Janaka Bandara提及in the comments

  

这确实 删除<none> - 为我标记的图片(例如foo/bar:<none>);我必须使用docker images --digestsdocker rmi foo/bar@<digest>

Janaka从 How to Remove a Signed Image with a Tag 引用“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 option (未标记的条目包含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     

请注意保罗还提到了moby issue 18892

  

在提取已签名的图片后,“<none>”输出中会有一个“额外”条目(标记为docker images)。
  这使得rmi图像变得困难(您必须强制它,否则先删除正确标记的条目,或通过摘要删除。

答案 1 :(得分:15)

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

你可以试试这个

答案 2 :(得分:11)

只需运行以下命令:

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

答案 3 :(得分:10)

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

悬空和未使用图像之间的区别在this stackoverflow thread中解释。

答案 4 :(得分:6)

new[]

答案 5 :(得分:3)

根据docker documentation,您只能使用列出未标记(悬挂)的图像

a |= (1 << 8); //not assign, just set bitmask.

然后将其重定向至$ docker images -f "dangling=true" 命令,

docker rmi

通知$ docker rmi $(docker images -f "dangling=true" -q) --force 参数仅显示容器的数字ID。

答案 6 :(得分:2)

100%的作品:alt+m

答案 7 :(得分:2)

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

答案 8 :(得分:2)

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

$ 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

答案 9 :(得分:1)

要删除悬空图像,请使用:

docker image rm $(docker images --format "{{.ID}}" --filter "dangling=true")

有关更详细的说明,请参阅我的回答:https://unix.stackexchange.com/a/445664/292327

答案 10 :(得分:1)

运行以下命令以使用docker rmi删除图像

docker images --filter "dangling=true"      

答案 11 :(得分:1)

尝试此操作以查看带有标签<none>的列表Docker映像ID

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

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

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

答案 12 :(得分:1)

使用以下内容删除具有none作为存储库名称的图像:

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

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

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

答案 13 :(得分:1)

  

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

$ 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

答案 14 :(得分:1)

docker system prune将解决问题,将其删除

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

但是请谨慎使用!

答案 15 :(得分:0)

删除所有退出的容器

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

或根据模式移除容器

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

答案 16 :(得分:0)

这是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

答案 17 :(得分:0)

全部

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

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

答案 18 :(得分:0)

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

docker rm $(docker ps -a -q)

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

docker image prune

答案 19 :(得分:0)

以下操作将删除所有<none>张图片

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

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

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

答案 20 :(得分:0)

第一个解决方案:

  1. 先删除不用的容器。

    docker ps -a | grep -v 向上 | awk '{ 打印 $1; }' | xargs 码头工人 rm

  2. 删除所有没有标签的容器。

    泊坞窗图像 | grep 无 | awk '{ 打印 $3; }' | xargs 码头工人 rmi


第二种解决方案删除所有:

$ docker system prune -a

警告!这将删除:

  • 所有停止的容器
  • 至少一个容器未使用的所有网络
  • 没有至少一个容器关联的所有图像
  • 所有构建缓存

您确定要继续吗? [是/否]

答案 21 :(得分:0)

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

答案 22 :(得分: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。

答案 23 :(得分:0)

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

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

答案 24 :(得分:0)

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

docker image prune

对于所有容器:

docker container prune

答案 25 :(得分:0)

我为 Windows 找到了这个:

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

参考: https://gist.github.com/sebagomez/b00bd9e3610abab55fefe3d69f3708ad

答案 26 :(得分:-1)

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

答案 27 :(得分:-1)

尝试

docker rmi -f $(docker images -a | awk 'NR> 1 || $2 = "<none>" {print $3}') ,虽然可能有更清洁的命令

更新了

答案 28 :(得分:-1)

只需使用ID删除图片:

# docker rmi 5e2dfc857e73 d053e988f23d ...

答案 29 :(得分:-3)

docker rmi $(docker images -a -q)

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