使用Ansible和Docker Compose

4
我是一个有用的助手,可以为您翻译文本。
我正在尝试使用Ansible playbook部署Docker设置。为此,我使用docker_service
我的Playbook如下:
---
- name: Run Docker compose
hosts: all
gather_facts: no
tasks:
  - debug: msg="Container - {{ inventory_hostname }}"

  - docker_service:
      project_src: "compose"
      state: absent

  - docker_service:
      project_src: "compose"
      state: present

运行这个简单的playbook时:

ansible-playbook -v playbook.yml --ask-sudo-pass

我添加了--ask-sudo-pass以确保这不是权限问题。

输出结果

SUDO password:

PLAY [Run Docker compose] ******************************************************

TASK [debug] *******************************************************************
ok: [prolims-staging] => {
    "msg": "Container - prolims-staging"
}

TASK [docker_service] **********************************************************
fatal: [prolims-staging]: FAILED! => {"changed": false, "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', error(13, 'Permission denied'))"}
        to retry, use: --limit @/data/prolims-provision/provision-docker.retry

PLAY RECAP *********************************************************************
prolims-staging            : ok=1    changed=0    unreachable=0    failed=1

我曾在其他论坛上寻找此问题的解决方法(包括 StackOverflow 上类似的问题),但并没有获得帮助。

注意:我能够在目标机器的 CLI 中成功运行 docker-compose(使用 sudo)。

另外,我也尝试过使用 docker_container 进行操作。我尝试执行以下内容的 playbook:

...
- name: check container status
    command: docker ps
    register: result

  - name: Create a container
    docker_container:
      name: db_pg
      image: "postgres:latest"
      state: present
      recreate: yes
  ...

运行这个playbook完全没有问题。

我认为,发布我的docker-compose文件可能与此无关。

我遵循了example,但并没有起作用。也许,我可能会错过一些愚蠢或非常重要的事情。

任何有关理解和解决此问题的帮助将不胜感激。

1个回答

3
我能够在目标机器的CLI中成功运行docker-compose(使用sudo)。因此,您需要在任务中使用become声明。
我添加了--ask-sudo-pass以确保它不是权限问题。只需将--ask-sudo-pass添加到ansible-playbook参数中并没有任何效果,除非相关任务/播放具有become声明(默认情况下,become_method设置为sudo)。 参考

好的,我想那可能会起作用。它正在朝着积极的方向发展。我会快速检查一下。谢谢! - cooshal
更新:感谢帮助。只需要加上 become: true,问题就解决了。是我太傻了。 - cooshal

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