docker - 使用 Ansible 重启多个 Docker 容器

标签 docker docker-compose ansible ansible-inventory

如何从 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/

相关文章:

git - Docker 容器无法从 github.com 克隆

javascript - 在 Node js 中创建文本文件时出现错误 : ENOENT: no such file or directory, 打开错误

post - Docker - 如何在启动后自动在 REST 容器上发布请求?

Docker Compose 网络多播

grep - 如何检查 Ansible 的命令输出中是否存在字符串列表?

docker - 仅在Docker中重建代码

docker - Docker 容器的 Nginx 反向代理

ruby-on-rails - docker-compose 重启连接池已满

ansible - ansible 中的换行符 - var 提示符

regex - Ansible:lineinfile 不断压缩我现有的行而不是向其附加文本