【问题标题】:Get containers running a given image version获取运行给定镜像版本的容器
【发布时间】:2015-05-28 20:58:31
【问题描述】:

我需要管理我服务器的 Docker 映像缓存,以确保不会填满磁盘。

我想获取当前未由正在运行的容器使用的所有 Docker 映像的列表。我可以使用以下内容获取正在运行的 Docker 容器的列表:

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                         PORTS               NAMES
fdbe4426220a        ubuntu:latest       "/bin/bash"         5 days ago          Running                       compassionate_brown   

我还可以使用以下内容获取本地 Docker 映像列表:

$ sudo docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
ubuntu              latest              07f8e8c5e660        3 weeks ago         188.3 MB
ubuntu              12.04.5             ac6b0eaa3203        3 weeks ago         132.5 MB

基于以上信息,我可以得出结论,我可以 rmiubuntu:12.04.5,这不再是必要的,因为没有任何东西基于它运行。

用命令行工具解析这个有点糟糕,ps--filter 方法似乎无法让我根据图像名称进行搜索。我无法看到输出更多机器可读的列表,因此我可以使用脚本或其他东西来解析内容以删除旧图像。

Docker 是否提供了一种方法来在它们填满磁盘之前清理旧的未使用图像?对于自动化发布的组织来说,这似乎是一个大问题,所以我假设实际上存在 一种管理它的方法。我在 Ubuntu 14.04 主机上使用 Docker 最新版本 1.6。

【问题讨论】:

  • 顺便说一下,不要忘记docker ps只会显示正在运行的容器,你可能有一些容器以错误结束并且应该正在运行,docker ps -a会显示你所有的容器(或者,如果你只想要 id,就像答案所说的 docker ps -aq

标签: docker


【解决方案1】:

我无法看到输出更机器可读的列表,因此我可以使用脚本或其他东西来解析内容以删除旧图像。

docker psdocker images 都有一个 -q 选项,这使得它们只输出哈希列表而不是表格。将其与docker inspect's templates 和一些常见的 shell 实用程序结合起来,我们可以得到:

#!/bin/bash
comm -23 <(docker images -q --no-trunc | sort) \
         <(docker ps -aq | xargs docker inspect -f '{{.Image}}' | sort -u)

输出所有未使用图像的哈希值。

【讨论】:

    猜你喜欢
    • 2021-11-29
    • 2019-12-20
    • 1970-01-01
    • 2021-11-06
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多