Playbook无法找到community.docker模块

70次阅读
没有评论

问题描述

在编写一个Playbook时,希望能够下载一个Docker镜像并在一组服务器上运行。他已经创建了一个Python 3.6的虚拟环境,并在其中安装了Ansible。然后他运行了以下命令:

ansible-galaxy collections install community.docker

他验证了该集合已经下载并位于.ansible/collections/ansible_collections文件夹中。
他的Playbook如下所示:

- name: test docker
  hosts: all
  collections:
    - community.docker
  become: true
  tasks:
    - name: log into the ocir registry
      docker_login:
        registry_url: "{{ ocir_registry }}"
        username: "{{ docker_user }}"
        password: "{{ ocir_auth_token }}"
        state: present
    - name: ensure a container is running
      docker_container:
        name: LDAPServer
        state: started
        image: "{{ docker_image }}"
        pull: true
        restart_policy: always
        ports:
          - "3000:3000"

当他运行以下命令时:

ansible-playbook docker.yml

他一直收到以下错误:

"/tmp/ansible_community.docker.docker_login_payload_KMQkW7/ansible_community.docker.docker_login_p ayload.zip/ansible_collections/community/docker/plugins/module_utils/common.py", line 33, in <module> from docker import __version__ as docker_version ImportError: No module named docker

他确认在虚拟环境中安装了docker,并且在运行Playbook时已经激活了虚拟环境。
他想知道自己做错了什么,或者没有正确设置什么。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

解决方案1

为了使用Docker Ansible模块,您需要安装Python docker模块。
根据Ansible Docker要求
大多数community.docker模块和插件都需要Python的Docker SDK。SDK需要安装在执行模块和插件的机器上,并且需要与执行模块和插件的Python版本一致。
因此,在使用community.docker集合之前,您需要执行pip install docker(假设使用python3)。

解决方案2

如果您已经安装了docker模块,但仍然遇到导入错误,请尝试以下解决方法。
1. 确保您的虚拟环境已正确激活,并且在激活状态下运行Playbook。
2. 确保您的虚拟环境中的docker模块与Ansible所需的版本兼容。您可以尝试升级或降级docker模块的版本,以与Ansible兼容。
3. 检查您的虚拟环境中是否存在其他与docker模块冲突的模块。如果有冲突的模块,尝试卸载或禁用它们,然后重新安装docker模块。
4. 如果上述解决方法仍然无效,您可以尝试在新的计算实例上重新安装Ansible和docker模块。确保使用pip3安装Ansible、docker和oci,并验证在Python交互式解释器中可以加载oci和docker模块。然后重新运行Playbook。
请注意,如果您使用的是不同的Python版本或Ansible版本,可能会导致模块导入错误。确保所有组件的版本兼容性。

正文完