我正在删除摇晃的码头图片。
在删除这些图像之前,我想看看是否有任何容器,这些容器来自这些悬空图像。
如果是这样,我想记录它们并中止删除。
到目前为止,我没有找到任何命令。
我的解决方案是获取所有容器docker ps -a
和所有悬空图片docker images -aqf dangling=true
,并将图片中的repo + tag
与容器中的image
进行比较。
我正在使用泊坞窗1.12
答案 0 :(得分:6)
如何列出图像及其容器?
您可以修改--format
以满足您的需求:
docker ps -a --format="container:{{.ID}} image:{{.Image}}"
如何删除悬空图像?
此命令用于清除悬空图像,而不会触及容器正在使用的图像:
$ docker image prune
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
但是如果您在docker版本中没有该命令,可以尝试以下操作。
如果图像悬空,您应该在docker ps
的IMAGE列中看到一个哈希值。这不应该是一个通常的情况,很难。
通过运行/停止的容器打印使用过的图像:
docker ps -a --format="{{.Image}}"
这列出你的悬空图像:
docker images -qf "dangling=true"
请谨慎行事:
#!/bin/bash
# Remove all the dangling images
DANGLING_IMAGES=$(docker images -qf "dangling=true")
if [[ -n $DANGLING_IMAGES ]]; then
docker rmi "$DANGLING_IMAGES"
fi
# Get all the images currently in use
USED_IMAGES=($( \
docker ps -a --format '{{.Image}}' | \
sort -u | \
uniq | \
awk -F ':' '$2{print $1":"$2}!$2{print $1":latest"}' \
))
# Remove the unused images
for i in "${DANGLING_IMAGES[@]}"; do
UNUSED=true
for j in "${USED_IMAGES[@]}"; do
if [[ "$i" == "$j" ]]; then
UNUSED=false
fi
done
if [[ "$UNUSED" == true ]]; then
docker rmi "$i"
fi
done