awk - 无法删除没有标签/<none> 标签的 docker 图像

标签 awk grep docker delete-file image-file

我正在使用 docker ,我发现当我运行一个

docker images -a

我有大量没有标签的图片,或者至少它们有标签

<none>

这些在我的磁盘上浪费了太多空间,现在 df -h 告诉我我的根已满。

我潜伏在互联网上发现

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

至少会遍历所有的 none,但随后我会收到一大堆错误消息。

Error: response from daemon: Conflict, <id> wasn't deleted
Error: response from daemon: Conflict, <id> wasn't deleted 
Error: response from daemon: Conflict, <id> wasn't deleted
Error: response from daemon: Conflict, <id> wasn't deleted 
etc...
Error: failed to remove images: [<list of all the image ids that I want gone>]

这有点烦人。有谁知道这些没有标记的图像是什么,为什么我的命令没有删除它们?

最佳答案

每当您构建标记图像的新版本时(例如,您运行 docker build -t foo . ,更改 Dockerfile 中的某些内容,然后再次运行该命令),旧图像不会被删除;它只是被拿走了它的标签。 <none>您看到的是没有留下任何标签的图像,您可以通过指定图像 ID(fe336c4cdb2f 或其他)在命令中引用它们。因此,您可以通过将这些 ID 传递给 docker rmi 来删除它们,或者您可以这样做:

docker images -f dangling=true -q | xargs -r docker rmi

如果您仍然收到有关无法删除图像的错误消息,可能是仍然有容器在使用这些旧图像;通过运行 docker ps -a 检查.

关于awk - 无法删除没有标签/<none> 标签的 docker 图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31687188/

相关文章:

shell - SED 或 AWK 全部替换为另一个文件中的模式

linux - 关于 grep 的退出值

linux - 删除 wget 输出中的重复行

unix - 仅打印匹配的单词,而不是通过grep打印整行

docker - 尝试在尽可能小的容器中运行二进制文件

linux - 使用 shell 脚本替换文件中的标记

linux - 关于 linux 中的 awk shell 和 pipe

c# - 在 Docker 中使用 EF Core 对 SQLite DB 的每个查询都非常慢,除非有对 OpenConnection 的显式调用

Azure Artifacts 在尝试构建 Dockerfile 时给出未经授权的信息

linux - 将两个文件与公共(public)列合并