Docker compose 如何在Ansible中运行临时docker compose命令?

Docker compose 如何在Ansible中运行临时docker compose命令?,docker-compose,phoenix-framework,ansible-2.x,Docker Compose,Phoenix Framework,Ansible 2.x,我必须为我的Phoenix web app项目运行几个docker compose运行命令。从终端,我必须运行以下命令: $sudo docker compose运行web mix do deps.get,编译 $sudo docker compose运行web mix Exto.create $sudo docker compose运行web mix-exto.migrate 虽然这很好,但我想使用Ansible将其自动化。我很清楚,docker_服务有一个使用docker compose A

我必须为我的Phoenix web app项目运行几个
docker compose运行
命令。从终端,我必须运行以下命令:

$sudo docker compose运行web mix do deps.get,编译

$sudo docker compose运行web mix Exto.create

$sudo docker compose运行web mix-exto.migrate

虽然这很好,但我想使用Ansible将其自动化。我很清楚,docker_服务有一个使用docker compose API的docker_服务Ansible模块,我还知道
定义
选项,它可以很容易地将docker-compose.yml中的配置隐式集成到我的剧本中。
我不知道的是如何确保在启动容器之前运行上述命令。有人能帮我解决这个问题吗?

我遇到了与您类似的情况,无法通过Ansible的docker专用模块运行docker compose run命令。然而,我最终成功地实现了我的目标。这里我们有一些例子,适合您的情况

一个接一个,明确的方式 相同的方式,但更短 要在启动
docker compose.yml
文件中定义的其他容器之前运行这些命令,以下几点的组合可能会有所帮助:

  • 使用docker卷保存获取依赖项、编译和EXTO命令的结果
  • 使用
    docker compose.yml
    文件中的
    dependens\u on
    配置选项
  • 使用playbook中的
    服务
    参数仅运行容器的子集
  • 通过
    --rm
    选项和可能的
    --no deps
    选项,将一次性容器与您的
    docker compose run
    命令一起使用
  • 在剧本中,在执行
    docker_服务
    任务之前,执行
    docker compose run
    命令
一些注意事项:

  • 在写这个答案的时候,我正在使用Ansible 2.5
  • 我假设docker compose binary已经安装,工作正常,并且在托管主机上的标准系统
    PATH
    上可用
  • docker compose.yml
    文件已存在,其路径为
    /path/to/directory/having/your/docker compose.yml
    ,如示例所示。还可以使用该文件路径的变量
就这样

- name: Run mix deps.get and compile
  shell: docker-compose run web mix do deps.get, compile
  args:
    chdir: /path/to/directory/having/your/docker-compose.yml
  become: True # because you're using sudo

- name: Run mix ecto.create
  shell: docker-compose run web mix ecto.create
  args:
    chdir: /path/to/directory/having/your/docker-compose.yml
  become: True

- name: Run mix ecto.migrate
  shell: docker-compose run web mix ecto.migrate
  args:
    chdir: /path/to/directory/having/your/docker-compose.yml
  become: True
- name: Run mix commands
  shell: docker-compose run web mix "{{ item }}"
  args:
    chdir: /path/to/directory/having/your/docker-compose.yml
  loop:
    - "do deps.get, compile"
    - "ecto.create"
    - "ecto.migrate"
  become: True