在Ansible剧本中执行docker-compose

时间:2019-10-11 13:27:56

标签: ansible

我有一个ansible-playbook.yml文件,我需要从内部执行docker-compose

- name: copy sql schema
  hosts: test-mysql
  gather_facts: no
  tasks:

    - name: Docker compose
      command: docker-compose -f {{ name }}_compose.yml up -d

但是我总是会出错:

fatal: [test-mysql]: FAILED! => {"changed": false, "cmd": "docker-compose Mick_compose.yml up -d", "failed": true, "msg": "[Errno 2] No such file or directory", "rc": 2}

任何提示?谢谢


使用命令: -名称:确保撰写服务已启动   docker_compose:     project_src:/ path / to / your / compose / project     文件:       -{{name}} _ compose.yml     状态:存在 我得到错误: 令人反感的行似乎是:

- name: Make sure compose service is up
   docker_compose:
                 ^ here

2 个答案:

答案 0 :(得分:0)

  

[Errno 2]没有这样的文件或目录

启动命令的默认目录中实际上没有Mick_compose.yml这样的文件或目录。要解决此问题,我可以向您展示如何将目录从command module更改为保存文件的正确目录。

但是我会让你自己发现这一点(如果您仍然想在解释后继续这样做),因为当出现existing ansible module already doing what you need

时,您不应该直接运行命令
- name: Make sure compose service is up
  docker_compose:
    project_src: /path/to/your/compose/project
    files:
      - "{{ name }}_compose.yml"
    state: present

这只是为了让您步入正轨,请查看上方的模块doc链接,以获取有关可能参数的更多信息。

答案 1 :(得分:0)

运行手册的目录不包含{{ name }}_compose.yml文件。

relevant module可以为您提供帮助。 如果您不想使用它,则可以添加任务,该任务将显示剧本的运行目录:

- name: copy sql schema
  hosts: test-mysql
  gather_facts: no
  tasks:
    - debug: 
        msg: "{{ playbook_dir }}"
    - name: Docker compose
      command: docker-compose -f {{ name }}_compose.yml up -d

然后,将{{ name }}_compose.yml移动到目录或在命令中提供绝对路径:docker-compose -f [abs_path]{{ name }}_compose.yml up -d