Nig*_*rle 32 ansible docker ansible-playbook
我想要完成的是在Docker容器中运行命令,该容器已经使用Ansible在Digital Ocean Ubuntu/Docker Droplet上创建.
似乎无法找到任何东西,或者我主要缺少一些东西.这是我的剧本中的Ansible任务.我对Ansible很新,所以任何建议或智慧都会受到高度赞赏.
- name: Test Deploy
hosts: [my-cluster-of-servers]
tasks:
- name: Go Into Docker Container And Run Multiple Commands
docker:
name: [container-name]
image: [image-ive-created-container-with-on-server]
state: present
command: docker exec -it [container-name] bash
Run Code Online (Sandbox Code Playgroud)
Ber*_*nie 40
在与ansible github项目的一些非常有帮助的开发人员讨论之后,更好的方法是这样做:
- name: add container to inventory
add_host:
name: [container-name]
ansible_connection: docker
changed_when: false
- name: run command in container
delegate_to: [container-name]
raw: bash
Run Code Online (Sandbox Code Playgroud)
如果在映像中安装了python,则可以使用命令模块或任何其他模块而不是raw.
如果要在远程docker主机上执行此操作,请添加:
ansible_docker_extra_args: "-H=tcp://[docker-host]:[api port]"
Run Code Online (Sandbox Code Playgroud)
到add_host块.
有关更完整的示例,请参阅Ansible文档.
Von*_*onC 17
您应该能够使用以下命令执行脚本(包含您的命令序列)docker exec:
docker exec container-name bash -l -c /path/to/script > /path/to/log
Run Code Online (Sandbox Code Playgroud)
(另请参阅" 为什么我必须bash -l -c在容器内使用? ")
/path/to/script 应该可以通过Ansible流程访问. /path/to/log 是容器内部的路径,可以在卷中共享.Fre*_*ric 10
由于Ansible 2.10 docker_container_exec是该集合的一部分community.docker:
- name: Run a simple command (command)
community.docker.docker_container_exec:
container: foo
command: /bin/bash -c "ls -lah"
chdir: /root
register: result
- name: Print stdout
debug:
var: result.stdout
Run Code Online (Sandbox Code Playgroud)
可以运行使用Docker容器内的命令的命令模块.例如这个代码将执行echo "Hello1"与echo "Hello2"在my_container:
tasks:
- name: Execute commands in docker container
command: docker exec -it my_container bash -c 'echo "Hello1"; echo "Hello2"'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
29710 次 |
| 最近记录: |