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

Ansible运行docker_compose模块报No module named 'compose'错误

问题根因
  • 本地安装的Docker Compose v2.6.1是Go编译的独立二进制程序,不会向Python环境提供可导入的compose模块
  • pyenv安装的Python版docker-compose v1.29.2仅在pyenv管理的Python 3.9环境中生效,Ansible执行模块默认调用系统自带Python解释器,未加载pyenv环境配置,无法读取pyenv虚拟环境内安装的compose包
  • 当前使用的community.docker.docker_compose模块为适配Compose v1(Python版本)开发,默认依赖Python环境的compose模块,无法直接识别系统中的Compose v2二进制文件
解决方案

可根据自身需求任选以下一种方案修复:

方案1:给Ansible调用的Python环境直接装依赖(最快修复)

  1. 先查询Ansible当前默认使用的Python解释器路径,执行命令:
    ansible -m setup localhost | grep ansible_python_executable
  2. 用查询到的Python解释器对应的pip安装docker-compose包,比如查询结果显示解释器路径为/usr/bin/python3,就执行:
    /usr/bin/python3 -m pip install docker-compose
    安装完成后重新运行playbook即可正常执行。

方案2:换用支持Compose v2的官方新模块(长期使用推荐)

community.docker集合3.0.0及以上版本提供了专门适配Compose v2二进制的community.docker.docker_compose_v2模块,不需要安装任何Python版本的compose依赖,可以直接调用系统里已经装好的Docker Compose v2,参数和老模块基本兼容。
首先升级本地的community.docker集合到最新版:
ansible-galaxy collection install community.docker:>=3.0.0 --upgrade
然后修改playbook,替换模块名即可:

- name: Deploy services with docker compose v2
  hosts: localhost
  gather_facts: no
  tasks:
    - name: Start services
      community.docker.docker_compose_v2:
        project_src: "/opt/X/{{item}}"
        files: [ "docker-compose.yml" , "docker-compose.override.yml" ]
        state: present
      with_items:
        - kubefwd
        - filebeat
        - kibana
        - logstash
        - metricbeat

方案3:临时指定Ansible使用pyenv中的Python解释器

如果不想修改系统Python的包,也不想替换现有模块,可以在运行playbook时显式指定Ansible使用pyenv里已经装了docker-compose的Python解释器,执行命令时追加参数即可:
ansible-playbook elastic.yml -e ansible_python_interpreter=/Users/X/.pyenv/versions/3.9-dev/bin/python3
注意把路径替换成pyenv环境中Python 3.9的实际可执行文件路径。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 12:48:15