You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中传递tel变量至Docker-compose文件以部署容器

解决Ansible传递变量到Docker Compose实现多容器部署问题

问题场景

通过Ansible重复调用同一角色部署7个独立容器,每个任务传入不同的tel变量,期望该变量替换Docker Compose卷挂载路径中的占位符,实现每个容器挂载对应专属主机文件。但变量始终未生效,直接写死tel值虽能运行,但无法生成对应专属容器。

解决方案

方法一:将Docker Compose转为Jinja2模板(推荐)

利用Ansible的模板渲染能力,让变量在生成Compose文件时直接替换:

  1. 修改Compose文件为模板
    将原docker-compose.yml重命名为docker-compose.yml.j2,把所有占位符替换为Ansible Jinja2语法:
---
version: '3.8'
services:
  tel:
    image: tro.azurecr.io/dor.io/telegraf:1.2.0
    networks:
      - external
    volumes:
      - "/etc/{{ tel }}/telaf_ca_mas.cer:/etc/tel/ca_mas.cer"
      - "/etc/{{ tel }}/telaf_{{ conf_name }}telegraf.conf:/etc/tel/tel.conf"
    logging:
      driver: "json-file"
      options:
        max-file: "3"
        max-size: 100m
    restart: always

volumes:
  tel-volume:

networks:
  external:
  1. 更新角色任务
    在角色docker_stack_telrf_net_ronse的tasks/main.yml中,先渲染模板生成实际Compose文件,再执行部署:
- name: 渲染Docker Compose模板
  template:
    src: docker-compose.yml.j2
    dest: /opt/deploy/{{ tel }}/docker-compose.yml  # 每个任务用tel变量作为独立目录,避免文件覆盖
    mode: '0644'

- name: 启动专属容器栈
  community.docker.docker_compose:
    project_src: /opt/deploy/{{ tel }}/
    project_name: "{{ tel }}_telegraf"  # 用tel作为项目名,确保容器组唯一
    state: present

方法二:通过环境变量传递给docker-compose

如果不想修改Compose文件结构,可在执行部署时直接传递环境变量:

  1. 保持原Compose文件不变
    继续使用带有${tel}、${conf_name}占位符的Compose文件。
  2. 更新角色任务
    在部署任务中通过environment参数传递变量:
- name: 启动专属容器栈
  community.docker.docker_compose:
    project_src: /opt/deploy/
    project_name: "{{ tel }}_telegraf"  # 必须指定唯一项目名,避免容器冲突
    state: present
  environment:
    tel: "{{ tel }}"
    conf_name: "{{ conf_name }}"  # 同步传递conf_name变量

这种方式让docker-compose命令读取环境变量完成占位符替换,无需改动原有Compose文件。

关键注意事项

  • 必须为每个任务指定唯一的项目名(project_name),否则后续任务会覆盖之前的容器。
  • 确保conf_name变量也正确传递,因为Compose文件中同时存在该占位符。

内容的提问来源于stack exchange,提问作者Fuad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 04:52:53