docker - 使用 Ansible 重启多个 Docker 容器
问题描述
如何从 Ansible 动态重启所有 docker 容器?我的意思是我知道一种方法,我可以在变量中定义我的容器并循环它们,但我想要实现的是 -
获取当前正在运行的容器,并通过某个循环一一重启所有或部分容器。
如何使用 Ansible 实现这一目标?
解决方案
码头工人解释
检索所有正在运行的容器的名称/图像:
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}}"
推荐阅读
- javascript - 个性化轴范围
- android - 如何改进这些功能以在 recyclerView 上绑定位图?
- java - RecyclerView index=-1 快速滚动到底部时
- python - 如何在数字中添加数字并将结果放在列表中
- javascript - 如何知道 Selenium 后 UI 元素的定位器
- apache-kafka - Apache Kafka 配置中“leader.imbalance.per.broker.percentage”的含义
- c - 再次 - 无法更改 C 中的全局变量
- http - 当我运行我的守护进程时,该服务是一个 http 代理而不是 http
- amazon-web-services - Dynamodb 缺少并发请求的更新?
- javascript - 为什么 JavaScript 中的 typeof(array) 类型是对象而不是数组?