【问题标题】:Issue with running ansible playbook on docker containers on MAC在 MAC 上的 docker 容器上运行 ansible playbook 的问题
【发布时间】:2019-11-24 19:18:31
【问题描述】:

我启动了 3 个 ubuntu 容器来练习 ansible playbook。与 docker for MAC 一样,我不能直接在容器 ip 上使用 ssh,必须通过端口转发路由 followed this question

docker run -d -p 2024:22 dockerReg/ubuntu-ssh-enabled
docker run -d -p 2023:22 dockerReg/ubuntu-ssh-enabled
docker run -d -p 2022:22 dockerReg/ubuntu-ssh-enabled

我当前的库存文件如下所示

MacBook-Pro:~$ cat inventory.txt
target1 ansible_host=172.17.0.2 ansible_ssh_pass=Passw0rd
target2 ansible_host=172.17.0.3 ansible_ssh_pass=Passw0rd
target3 ansible_host=172.17.0.4 ansible_ssh_pass=Passw0rd

我现在需要运行什么命令来在我的清单文件中的所有目标上运行 ping 模块。这当然行不通:ansible target* -m ping -i inventory.txt

解决此问题的最佳方法是什么,或者有什么简单的解决方法?

【问题讨论】:

  • 在许多方面,虚拟机将更适合本练习。它们将运行一组正常的系统守护程序,包括作为正常设置的 sshd,并且当您尝试使用此类系统管理工具进行配置时,它们的行为方式与远程系统相同。

标签: macos docker ansible


【解决方案1】:

如果您正在启动 docker 容器,为什么不使用 docker connection plugin ?我从来没有使用过任何 machintosh,所以我可能会错过一些东西,但我不明白为什么只要您可以使用“普通”docker 命令与容器交互,它就不能按预期工作。

快速 POC 助您一臂之力。

库存inventories/docker-poc.yml

---
all:
  children:
    my_poc_hosts:
      vars:
        ansible_connection: docker
      hosts:
        target1:
        target2:
        target3:

如果你想保持ini格式,这是等价的:

[my_poc_hosts]
target1
target2
target3

[my_poc_hosts:vars]
ansible_connection=docker

启动测试容器

我使用了 python:3.8 映像(以确保安装了 python,因为它是 ansible 必需的)和一个长时间运行的自定义命令。

for i in {1..3} ; do docker run -d --rm --name target$i python:3.8 sh -c "while true; do sleep 20000; done"; done

使用 ad-hoc ping 进行快速测试

$ ansible -i inventories/docker-poc.yml my_poc_hosts -m ping
[WARNING]: Platform linux on host target1 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.

target1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[WARNING]: Platform linux on host target3 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.

target3 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[WARNING]: Platform linux on host target2 is using the discovered Python interpreter at /usr/bin/python, but future installation of another Python interpreter could change this. See
https://docs.ansible.com/ansible/2.9/reference_appendices/interpreter_discovery.html for more information.

target2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

清理

for i in {1..3}; do docker rm -f target$i; done

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    相关资源
    最近更新 更多