如何从 Ansible 动态重启所有 docker 容器?我的意思是我知道一种方法,我可以在变量中定义我的容器并循环它们,但我想要实现的是 -
获取当前正在运行的容器,并通过某个循环一一重启所有或部分容器。
如何使用 Ansible 实现这一目标?
最佳答案
docker 解释
检索所有正在运行的容器的名称/图像:
docker container ls -a --format '{{.Names}} {{.Image}}'
您还可以过滤 docket container
的输出命令到一个特定的图像名称,感谢 --filter ancestor=image_name
选项:docker container ls -a --filter ancestor=alpine --format '{{.Names}} {{.Image}}'
Ansible 集成:首先,我将一些过滤器定义为 Ansible 变量:
vars:
- image_v1: '--filter ancestor=my_image:v1'
- image_v2: '--filter ancestor=my_image:v2'
他们我将执行docker container
在专用任务中执行命令并将命令输出保存到 Ansible 变量中: - name: Get images name
command: docker container ls -a {{ image_v1 }} {{ image_v2 }} --format "{{ '{{' }}.Names {{ '}}' }} {{ '{{' }}.Image {{ '}}' }}"
register: docker_images
最后,我将对其进行迭代并将其用于 docker_container
ansible模块:- name: Restart images
docker_container:
name: "{{ item.split(' ')[0]}}"
image: "{{ item.split(' ')[1]}}"
state: started
restart: yes
loop: "{{ docker_images.stdout_lines}}"
最终剧本.yml ---
- hosts: localhost
gather_facts: no
vars:
- image_v1: '--filter ancestor=my_image:v1'
- image_v2: '--filter ancestor=my_image:v2'
tasks:
- name: Get images name
command: docker container ls -a {{ image_v1 }} {{ image_v2 }} --format "{{ '{{' }}.Names {{ '}}' }} {{ '{{' }}.Image {{ '}}' }}"
register: docker_images
- name: Restart images
docker_container:
name: "{{ item.split(' ')[0]}}"
image: "{{ item.split(' ')[1]}}"
state: started
restart: yes
loop: "{{ docker_images.stdout_lines}}"
关于docker - 使用 Ansible 重启多个 Docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61369132/