我如何引用与 ansible 角色任务 YAML 文件相关的 Dockerfile?
How can I reference a Dockerfile relative to the ansible role task YAML file?
我有一个具有以下目录路径的 Ansible 存储库
.
├── kube-init.sh
├── provisioning
│ ├── group_vars
│ │ └── all.yml
│ ├── roles
│ │ └── app_deploy
│ │ ├── files
│ │ │ ├── secretfile
│ │ ├── tasks
│ │ │ ├── docker
│ │ │ │ ├── Dockerfile
│ │ │ └── main.yml
│ │ └── vars
│ │ └── main.yaml
│ └── site.yml
├── README.md
我正尝试在 provisioning/roles/app_deploy/tasks/main.yaml
定义 docker 构建映像任务,如下所示
- name: Build image and with build args
vars:
ansible_python_interpreter: /usr/bin/python3
docker_image:
name: app-name
build:
path: docker
dockerfile: Dockerfile
args:
log_volume: /var/log/svm
listen_port: 8080
state: present
source: build
我无法完全让 Dockerfile/context 可用于 ansible 任务。尝试了 path
和 dockerfile
组合的 relative/absolute 值的各种组合。
我认为最明显的选择是跳过使用 dockerfile
并仅使用 path
作为 ./docker
,这并没有让我感到惊讶。
将 Ansible 与 Python3 配合使用 Docker v5 以上的 SDK
更多上下文。我实际上是在使用带有 Openstack 插件的 Vagrant 来为我的 Ansible 任务提供新的计算。该插件将 repo (Ansible) 的内容复制到目标机器上的路径 /home/vagrant
,并从那里运行配置脚本。
我通过以下方式找到了 docker 模块的正确路径。我在下面添加了一个调试任务,以确定我的 app_deploy/tasks/main.yml
从 as
运行的当前工作目录
- name: Find out playbook's path
shell: pwd
register: playbook_path_output
- debug: var=playbook_path_output.stdout
返回我 provisioning/roles
。我意识到 site.yml
所在的路径将其中一个角色定义为 app_deploy
.
因此,我将 docker 模块路径修改为
- name: Build image and with build args
vars:
ansible_python_interpreter: /usr/bin/python3
docker_image:
name: app-name
build:
path: ./roles/app_deploy/tasks/docker/
args:
log_volume: /var/log/svm
listen_port: 8080
state: present
source: build
但是根据 ,以上可能不是将 Dockerfile 及其组成文件存储在特定角色目录中的正确做法。
我有一个具有以下目录路径的 Ansible 存储库
.
├── kube-init.sh
├── provisioning
│ ├── group_vars
│ │ └── all.yml
│ ├── roles
│ │ └── app_deploy
│ │ ├── files
│ │ │ ├── secretfile
│ │ ├── tasks
│ │ │ ├── docker
│ │ │ │ ├── Dockerfile
│ │ │ └── main.yml
│ │ └── vars
│ │ └── main.yaml
│ └── site.yml
├── README.md
我正尝试在 provisioning/roles/app_deploy/tasks/main.yaml
定义 docker 构建映像任务,如下所示
- name: Build image and with build args
vars:
ansible_python_interpreter: /usr/bin/python3
docker_image:
name: app-name
build:
path: docker
dockerfile: Dockerfile
args:
log_volume: /var/log/svm
listen_port: 8080
state: present
source: build
我无法完全让 Dockerfile/context 可用于 ansible 任务。尝试了 path
和 dockerfile
组合的 relative/absolute 值的各种组合。
我认为最明显的选择是跳过使用 dockerfile
并仅使用 path
作为 ./docker
,这并没有让我感到惊讶。
将 Ansible 与 Python3 配合使用 Docker v5 以上的 SDK
更多上下文。我实际上是在使用带有 Openstack 插件的 Vagrant 来为我的 Ansible 任务提供新的计算。该插件将 repo (Ansible) 的内容复制到目标机器上的路径 /home/vagrant
,并从那里运行配置脚本。
我通过以下方式找到了 docker 模块的正确路径。我在下面添加了一个调试任务,以确定我的 app_deploy/tasks/main.yml
从 as
- name: Find out playbook's path
shell: pwd
register: playbook_path_output
- debug: var=playbook_path_output.stdout
返回我 provisioning/roles
。我意识到 site.yml
所在的路径将其中一个角色定义为 app_deploy
.
因此,我将 docker 模块路径修改为
- name: Build image and with build args
vars:
ansible_python_interpreter: /usr/bin/python3
docker_image:
name: app-name
build:
path: ./roles/app_deploy/tasks/docker/
args:
log_volume: /var/log/svm
listen_port: 8080
state: present
source: build
但是根据