使用anser与docker-compose

时间:2018-02-15 22:17:46

标签: docker ansible docker-compose

我正在尝试使用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

运行这个简单的剧本:

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(使用sudo)在目标机器上成功运行docker-compose。

另外,我也试过玩docker_container。我尝试用下面的内容执行一本剧本:

...
- 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
  ...

并且运行此剧本非常合适。

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

我遵循了这个example,但没有奏效。也许,我可能会在这里错过一些愚蠢或非常重要的事情。

理解和解决这个问题的任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:2)

  

我可以从CLI(使用sudo )在目标计算机上成功运行docker-compose。

因此,您需要对任务使用become声明。

  

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

只有将--ask-sudo-pass添加到ansible-playbook参数才会产生任何影响,除非相关任务/播放具有become声明(且become_method设置为{{1 },但这是默认情况下。)

Reference