如何在 Ansible 中使用 --all 来区分是否修剪 Docker 镜像?

Rap*_*ael 5 ansible docker devops

在 Ansible playbook 中,我们可以请求相当于调用

docker image prune
Run Code Online (Sandbox Code Playgroud)

这样:

docker image prune
Run Code Online (Sandbox Code Playgroud)

但是,似乎没有一种方法可以请求--all,即修剪容器中未使用的所有图像。无论如何,默认情况下它不会这样做:

TASK [role : Clean up Docker images] ***
ok: [server] => {
    "changed": false, 
    "images": [], 
    "images_space_reclaimed": 0
}
Run Code Online (Sandbox Code Playgroud)

显然,images_filters有一些选项与 CLI Docker 选项不直接对应:

用于选择要删除的图像的过滤器值字典。例如,dangling: true。有关可能的过滤器的更多信息,请参阅docker 文档。

不幸的是,这个选项根本没有记录在案。删除悬空图像是默认设置,那么true甚至会产生什么效果呢?

我如何告诉 Ansible 执行相当于 的操作docker image prune --all

Rap*_*ael 5

诀窍是正确猜测这dangling: true意味着“修剪悬空”。因此,这个任务完成了我们想要的:

- name: Clean up Docker images
  docker_prune:
    images: yes
    images_filters:
      dangling: false
Run Code Online (Sandbox Code Playgroud)
TASK [role : Clean up Docker images] ***
ok: [server] => {
  "changed": false,
  "images": [
    {
      "Untagged": "docker.io/ruby:alpine"
    },
    {
      "Untagged": "docker.io/ruby@sha256:cbcf3c98e7bd7dfd0a535c91a6c186eed483680cefe0c99ed1ed46d6efbb0e7b"
    },
    {
      "Deleted": "sha256:47c30d96ab20f3004776ff14fce824960f94dd8ba40f689a839d250befa8924e"
    },
    {
      "Deleted": "sha256:1ffdfb9e5dfb8e61532391c9624539dfe6695fa535d8dd375019ae910bc6a263"
    },
    {
      "Deleted": "sha256:59d90740fdbf9dae0a8c7e824cdb25b6636ab7c56d5d90a1ed52cc523123ef7f"
    },
    {
      "Deleted": "sha256:e0b257ffac8a68382fb702142120625ee8c7c579dd22143ac8ee02e0bb23e1eb"
    },
    {
      "Deleted": "sha256:d6fd80a889d96453e9b6b27c475952f0cc90fa6c0d1d922024cb4158362e16eb"
    },
    {
      "Deleted": "sha256:1bfeebd65323b8ddf5bd6a51cc7097b72788bc982e9ab3280d53d3c613adffa7"
    }
  ],
  "images_space_reclaimed": 51040409
}
Run Code Online (Sandbox Code Playgroud)