【发布时间】:2019-10-19 03:06:31
【问题描述】:
作为第一步,我正在尝试停止所有正在运行的容器,然后将它们删除。
我知道我可以使用 Anslible shell 包并运行以下命令:
docker container stop $(docker container ls -aq)
作为第二步,我可以对 shell 包执行相同的操作并清理死容器/图像/卷:
docker system prune -a -f --volumes
我尝试过这样的事情(代码示例):
- name: Stop all containers:
shell: "docker container stop $(docker container ls -aq)"
ignore_errors: yes
不幸的是,当容器为 0 时,这会引发我想要处理的错误。
我可以通过添加以下内容来改进它:
- name: Get info on docker host and list images
docker_host_info:
containers: yes
register: result
- name: Stop all containers
shell: "docker container stop $(docker container ls -aq)"
when: result.host_info.Containers != 0
我想通过使用纯粹的 Ansible 包来做到这一点,例如(docker_host_info)。我能够提取包含所有信息的容器的复杂列表,但我找不到获取容器 ID 或名称的方法。
我的计划是在使用 ID 或名称之后进行循环并一一阻止它们。
我设法提取了容器的数量(字符串格式),但我找不到将其转换为索引的方法,因此我可以循环。
代码示例:
- name: Get info on docker host and list images
docker_host_info:
containers: yes
register: result
- name: Debug dockerInfo
debug:
var: result.containers
# var: result.host_info.Containers
# loop: "{{ result.host_info.Containers }}"
# loop: "{{ range(0, 4)|list }}"
when: result.host_info.Containers != 0
是否可以将返回的字符串转换为索引并遍历该索引,例如(假代码示例):
- name: Debug dockerInfo
debug:
var: "{{ result.containers[item].Id }}
loop: result.host_info.Containers
when: result.host_info.Containers != 0
【问题讨论】:
标签: loops ansible containers