Ansible中移除未被Podman运行容器使用的镜像(去重问题)
解决Podman未使用镜像删除的去重问题
直接给你能用的Ansible Playbook方案,完全不用ignore_errors,也能精准处理重复ID:
- name: 删除未被运行容器使用的Podman镜像 hosts: localhost # 根据你的目标主机调整 gather_facts: false tasks: # 1. 获取系统中所有镜像的ID列表 - name: 获取所有Podman镜像信息 containers.podman.podman_image_info: register: all_images - name: 提取所有镜像ID set_fact: all_image_ids: "{{ all_images.images | map(attribute='Id') | list }}" # 2. 获取正在运行的容器所使用的镜像ID列表(自动去重) - name: 获取运行中Podman容器信息 containers.podman.podman_container_info: filters: status: running # 只过滤运行中的容器 register: running_containers - name: 提取并去重运行容器使用的镜像ID set_fact: used_image_ids: "{{ running_containers.containers | map(attribute='Image') | unique | list }}" # 3. 计算需要删除的镜像ID:所有镜像ID - 正在使用的镜像ID - name: 计算待删除的镜像ID set_fact: images_to_delete: "{{ all_image_ids | difference(used_image_ids) }}" # 4. 删除未被使用的镜像 - name: 删除未使用的Podman镜像 containers.podman.podman_image: name: "{{ item }}" state: absent loop: "{{ images_to_delete }}" when: images_to_delete | length > 0 # 没有要删的就跳过
关键说明:
- 用Ansible自带的
unique过滤器直接对运行容器的镜像ID去重,不用写复杂的Python逻辑,新手也能直接用 difference过滤器自动计算两个列表的差集,精准得到所有未被运行容器占用的镜像ID- 全程不需要
ignore_errors,只会处理真正可删除的镜像,不会产生冗余错误输出
内容的提问来源于stack exchange,提问作者d1530
相关产品推荐
相关产品推荐

