在Ansible playbook中执行docker-compose

4
我有一个 `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}

有什么提示吗?


使用命令:

- name: Make sure compose service is up
  docker_compose:
    project_src: /path/to/your/compose/project
    files:
      - {{ name }}_compose.yml
    state: present

我收到了错误信息:
The offending line appears to be:

    - name: Make sure compose service is up
       docker_compose:
                     ^ here
2个回答

3

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

实际上,在启动命令的默认目录中,并没有名为Mick_compose.yml的文件或目录。为了解决这个问题,我可以向你展示如何从command模块更改目录,以进入包含你的文件的正确目录。

但是,我会让你自己发现(如果在这种情况下你仍然真的想要这样做),因为当已经存在满足你需求的现有ansible模块时,你不应直接运行命令。

- name: Make sure compose service is up
  docker_compose:
    project_src: /path/to/your/compose/project
    files:
      - "{{ name }}_compose.yml"
    state: present

这只是让您进入轨道,更多关于可能参数的信息,请查看上面的模块文档链接。


有问题的代码行似乎是: files: - {{ name }}-compose.yml ^ 这里 - DinoDD
当您的值以jinja2扩展表达式开头时,引用您的值是必需的,就像我上面的例子中一样 => - "{{ name }}_compose.yml" - Zeitounator

1

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

相关模块可以帮助您。 如果您不想使用它,您可以添加一个任务来显示playbook运行的目录:

- 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


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