删除具有从属子图像的docker镜像

时间:2016-10-13 04:15:26

标签: docker docker-image

我想删除docker图片,但我遇到如下错误信息:

  

来自守护程序的错误响应:冲突:无法删除47bcc53f74dc   (不能强制) - 图像具有依赖子图像

我通过docker stop $(docker ps -a -q)命令停止所有容器。之后,我会通过docker rmi $(docker images | grep "busybox" | awk '{print $3}')命令删除所有 busybox 图片。我遇到上面的错误信息。

我显示docker images | grep busybox并获取如下信息:

busybox             1                   47bcc53f74dc        6 months ago        1.113 MB
busybox             1-uclibc            47bcc53f74dc        6 months ago        1.113 MB
busybox             1.24                47bcc53f74dc        6 months ago        1.113 MB
busybox             1.24-uclibc         47bcc53f74dc        6 months ago        1.113 MB
busybox             1.24.2              47bcc53f74dc        6 months ago        1.113 MB
busybox             1.24.2-uclibc       47bcc53f74dc        6 months ago        1.113 MB
busybox             uclibc              47bcc53f74dc        6 months ago        1.113 MB

如何删除 busybox 图片?感谢您的任何建议。

1 个答案:

答案 0 :(得分:2)

警告提示您某些容器仍然链接(继承)您要删除的Docker FS层。没有选项可以删除中间docker文件系统层,而无需根据这些层重新创建子映像。

说,你有这样的配置:

base_layer_A -> base_layer_B
           \        \_ child_layer_D
            \__ container C

...愿意删除容器C和A层。

您不能这样做(因为B层基于A层)。这是您遇到问题的最可能原因

PS:docker images -a可能会给你一些启示(不太可能)。有一个' -tree'切换一次以帮助解决这种情况,但不幸的是现在它已经消失了

这是清理废弃的docker容器和不推荐使用的图像层的直接而粗野的方法

#!/usr/bin/env bash
set -euo pipefail

for c in $(docker ps -a -f status=exited -f status=created -f status=dead --format="{{.ID}}"); do
    docker rm $c
done
for img in $(docker images -f dangling=true --format="{{.ID}}"); do
    docker rmi $img
done