如何列出图像及其容器

时间:2017-05-29 16:05:00

标签: docker

我正在删除摇晃的码头图片。

在删除这些图像之前,我想看看是否有任何容器,这些容器来自这些悬空图像。

如果是这样,我想记录它们并中止删除。

到目前为止,我没有找到任何命令。

我的解决方案是获取所有容器docker ps -a和所有悬空图片docker images -aqf dangling=true,并将图片中的repo + tag与容器中的image进行比较。

我正在使用泊坞窗1.12

1 个答案:

答案 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