我必须为Phoenix Web应用程序项目运行几个docker-compose run
命令。从终端我必须运行:
$ sudo docker-compose run web mix do deps.get, compile
$ sudo docker-compose run web mix ecto.create
$ sudo docker-compose run web mix ecto.migrate
虽然这很好用,但我想使用Ansible自动化它。我很清楚有 docker_service Ansible模块使用docker-compose API而且我也知道definition
选项可以很容易地隐藏在docker中集成配置-compose.yml进入我的剧本。
我不知道的是如何确保在启动容器之前运行上述命令。任何人都可以帮我解决这个问题吗?
答案 0 :(得分:0)
我遇到了类似你的情况,没有办法通过 docker 专用模块为Ansible运行 docker-compose run 命令。但是,为了我的目的,我最终使用Ansible's shell module成功了。这里有一些适合您情况的例子。
- 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
要在启动docker-compose.yml
文件中定义的其他容器之前运行这些命令,这些点的组合可能有所帮助:
depends_on
文件docker-compose.yml
配置选项
service
的{{1}}参数仅运行容器子集docker-compose run
命令通过--rm
选项使用一次性容器,并可能使用--no-deps
选项docker-compose run
任务docker_service
命令
一些注意事项:
PATH
上使用。docker-compose.yml
文件已存在且路径为 /path/to/directory/having/your/docker-compose.yml
,如示例所示。也可以使用该文件路径的变量。就是这样!