Docker compose 如何在Ansible中运行临时docker compose命令?
我必须为我的Phoenix web app项目运行几个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
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