Loops 如何使用Ansible停止所有容器
作为第一步,我尝试停止所有正在运行的容器,然后移除它们 我知道我可以使用Anslible shell软件包并运行以下命令:Loops 如何使用Ansible停止所有容器,loops,ansible,containers,Loops,Ansible,Containers,作为第一步,我尝试停止所有正在运行的容器,然后移除它们 我知道我可以使用Anslible shell软件包并运行以下命令: docker container stop $(docker container ls -aq) 作为第二步,我可以对shell package执行相同的操作,并清理死掉的容器/图像/卷: docker system prune -a -f --volumes 我尝试过这样的方法(代码示例): 不幸的是,当容器为0时,这会引发一个我想要处理的错误 我可以通过添加以下内容
docker container stop $(docker container ls -aq)
作为第二步,我可以对shell package执行相同的操作,并清理死掉的容器/图像/卷:
docker system prune -a -f --volumes
我尝试过这样的方法(代码示例):
不幸的是,当容器为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包来完成它,例如()。我能够提取包含所有信息的容器的复杂列表,但我无法找到获取容器Id或名称的方法
我的计划是在使用ID或名称后进行循环,并逐个停止它们
我设法提取了容器的数量(字符串格式),但我找不到一种方法将其转换为索引以便循环
代码示例:
- name: Stop all containers:
shell: "docker container stop $(docker container ls -aq)"
ignore_errors: yes
- 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
是否可以将返回的字符串转换为索引并遍历该索引,例如(伪代码样本):
result.containers
是一个列表,您可以直接对其进行迭代:
- name: Debug dockerInfo
debug:
var: item
loop: "{{ result.containers }}"
when: result.containers | length != 0
顺便说一句,debug
的var
只接受一个变量名,要调试表达式,必须使用msg
。
顺便说一句,对于
循环
关键字,您必须使用大括号计算表达式。是的,您是对的。我想得太多了,无缘无故地试图从字典中提取索引。当一个简单的循环与名称将做的工作。例如:msg:“{{item.Names[0]}”
。基于此字符串,我可以轻松停止容器。谢谢你的时间和努力。