Ansible:在Ansible playbook中无法运行docker compose

28

我似乎无法在ansible playbook中运行docker compose任务。 我陷入了一个循环中。

当运行sudo ansible-playbook playbook.yml时,我得到的第一个错误是以下内容

fatal: [10.0.3.5]: FAILED! => {"changed": false, "msg": "Unable to load docker-compose. Try `pip install docker-compose`. Error: No module named compose"}

于是我远程到那台机器上,执行了sudo pip install docker-compose,然后尝试重新运行playbook。这次我得到了...

fatal: [10.0.3.5]: FAILED! => {"changed": false, "msg": "Cannot have both the docker-py and docker python modules installed together as they use the same namespace and cause a corrupt installation. Please uninstall both packages, and re-install only the docker-py or docker python module"}

所以我尝试卸载 docker python...

  • sudo uninstall docker python

然后当我再次尝试运行playbook时,出现了以下情况。

fatal: [10.0.3.5]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"}

但是这已经安装在机器上了,因为当我运行sudo pip install docker-py时,我看到以下内容...

Requirement already satisfied (use --upgrade to upgrade): docker-py in /usr/local/lib/python2.7/dist-packages
Cleaning up...

有人知道如何跳出这个循环并成功地运行使用docker-compose的ansible playbook吗?

机器操作系统是linux 14.04

谢谢。


请考虑将Ansible playbook中相关的任务添加到您的问题中。 - bhotel
4个回答

38

我所采用的方法是,首先在 Ansible 的 virtualenv 下卸载与 Docker 相关的所有组件。

pip uninstall docker docker-py docker-compose

然后安装 docker-compose 模块,它会安装 docker 模块及其依赖项。

pip install docker-compose

Ansible 的 Docker 模块将尝试导入 docker,使用该模块也能成功,并因此不会提供误导性指令以安装 docker-py 而出现错误。


1
我在使用docker-compose安装AWX时遇到了这个问题,这个解决方案帮助我解决了这个问题,谢谢。 - mangolier
我通常使用apt-get安装Docker,并使用pip安装docker-compose。这解决了我的问题。但有时我必须执行上述解决方案。 - Tara Prasad Gurung
这个解决了我长时间调试awx的问题,非常感谢! - sadok-f

6

我在尝试运行sudo ansible playbook-with-docker.yaml时,遇到了相同的错误信息。

{"changed": false, "msg": "Unable to load docker-compose. Try `pip install docker-compose`. Error: No module named compose"}

我花了大约2个小时才弄清楚在Linux中pip installsudo pip install不同(一旦你知道发生了什么,这是相当明显的)。
所以如果有人遇到同样的问题 - 确保您以sudo或非sudo的方式一致运行所有内容,但不要混合使用 :)
另外,可以使用sudo pip list | grep docker进行验证。

2

正如其他答案中已经提到的那样,缺少docker-compose python模块。 您可以按照之前的答案手动安装它,或者您可以使用“纯”的Ansible解决方案,即通过task安装。

为此,请使用ansible.builtin.pip安装docker-compose模块(如果需要在同一个任务中安装更多模块)。

- hosts: all
  gather_facts: no
  tasks:
  - name: Install docker-compose python package
    ansible.builtin.pip:
      name: docker-compose

参考文献:https://docs.ansible.com/ansible/latest/collections/ansible/builtin/pip_module.html

本文介绍了Ansible的pip模块,该模块用于在目标计算机上管理Python包。使用pip模块,您可以轻松地安装、升级或删除Python包。此外,您还可以指定要安装的特定版本或从源代码安装包。


1
为了更好地理解Thermostat's answer,我使用了以下代码中的pip3而不是pip
Ubuntu 20.04
Ansible 2.10.7
Python 3.8.10
pip 20.0.2 (pip3)

以下是我如何修复我的问题:

首先,我运行了一个命令来删除所有现有的 dockerdocker-pydocker-compose Python 库:

pip3 uninstall docker docker-py docker-compose

然后运行下面的命令安装python docker-compose库python docker库
pip3 install docker-compose

那就这样了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接