Ansible通过docker,库存中的docker主机
使用from Docker Hub,我正在尝试运行ansible playbook,该playbook将配置运行容器的机器 例如,我运行以下命令:Ansible通过docker,库存中的docker主机,docker,ansible,Docker,Ansible,使用from Docker Hub,我正在尝试运行ansible playbook,该playbook将配置运行容器的机器 例如,我运行以下命令: docker run --net="host" -v <path_inventory>:/inventory -v <path_playbook>:/playbook.yml williamyeh/ansible:ubuntu16.04 ansible-playbook -vvvv -i /inventory /playboo
docker run --net="host" -v <path_inventory>:/inventory -v <path_playbook>:/playbook.yml williamyeh/ansible:ubuntu16.04 ansible-playbook -vvvv -i /inventory /playbook.yml
docker run--net=“host”-v:/inventory-v:/playbook.yml williamyeh/ansible:ubuntu16.04 ansible playbook-vvv-i/inventory/playbook.yml
使用此选项,我可以ping localhost,并且目录和剧本都可以访问
资源清册配置为使用本地连接:
[executors]
127.0.0.1
[executors:vars]
ansible_connection=local
ansible_user=<my_user_in_docker_host>
ansible_become=True
[执行人]
127.0.0.1
[遗嘱执行人:VAR]
ansible_连接=本地
ansible_用户=
ansible_变为True
组执行者是从剧本中引用的执行者
我看到playbook正在尝试以root用户身份连接(当我连接到容器时,默认情况下得到的)。在运行容器时指定-u似乎与Ansible不符
为用户建立本地连接:root
。。。本地连接成功后,出现错误,抱怨任何命令不可用。这对我来说毫无意义,因为根用户或非根用户都可以执行它们
有什么想法吗?此映像旨在作为其他映像的基础,并利用ansible作为提供映像需求的一种方式,而不是仅使用Dockerfile docker图像的文档中说明了这一点: 主要用作配置上其他软件堆栈的基础映像 某些指定的Linux发行版 可以将其视为以比使用其他选项(VM、Vagrant…)更轻松的方式执行CI任务的基础映像 考虑到docker的优点是它将主机与容器隔离,因此您无法从容器访问主机文件(绑定的任何卷除外)。否则,这将是一个安全问题
关于我能够使用ansible在docker容器中配置主机。然而,我没有使用docker主机网络,而是使用docker网桥网络 在容器中启动ansible playbook时,localhost将是容器本身的localhost。这很好,因为ansible中的本地_操作在容器本身中运行,远程操作在主机上运行 这是docker运行示例的修改版本:
docker run -v <path_inventory>:/inventory -v <path_playbook>:/playbook.yml williamyeh/ansible:ubuntu16.04 ansible-playbook -vvvv -i /inventory/playbook.yml
[executors]
<my_host_ip>
[executors:vars]
ansible_connection=ssh
ansible_user=<my_host_user>
ansible_become=True
容器将使用ssh连接到主机上的docker接口
其他一些提示:
- ssh需要监听docker0接口
- iptables/nftables需要提供从ansible容器到docker0接口的ssh访问
- 默认情况下,Ansible使用密钥通过ssh进行连接。通过使用ansible playbook命令的-k和/或-k参数,您可以提供密码
ip addr show docker0