【问题标题】:Run ansible playbook from docker container and deploy on host machine从 docker 容器运行 ansible playbook 并部署在主机上
【发布时间】:2018-11-03 17:46:31
【问题描述】:

我想使用 docker 容器中的 ansible 在我的本地机器上运行 ansible playbook。 这是我的 Ansible Dockerfile 的样子:

FROM alpine:3.6

WORKDIR /ansible

RUN apk update \
    && apk add ansible

ENTRYPOINT ["ansible-playbook"]

playbook.yml:

---
- hosts: localhost
  roles:
  - osx

roles/osx/tasks/main.yml

---
- name: Welcome
  shell: echo "Hello"
  when: ansible_distribution == 'MacOSX'

然后我运行它:

docker build -t ansible_image:latest .
docker run --rm --network host \
-v $(pwd):/ansible \
ansible_image:latest ansible/playbook.yml

我的主机操作系统是 OS X。我希望 osx 角色能够执行, 然而,剧本似乎是在高山容器上运行的。 我想问一下如何在docker中指示ansible在我的本地机器上部署东西?

【问题讨论】:

  • brew install ansible 会容易得多。在此设置中,Ansible-in-a-container 需要一个路径来远程执行主机上的管理命令,这可能意味着类似于与host.docker.internal 的 ssh 连接,这反过来意味着在主机上运行 sshd 并推送有效密钥配对到容器中。尝试在 Docker 容器中嵌入一个管理主机的工具会使一切变得比实际需要的困难得多。
  • 是的,这会更容易。但是我想让我的环境独立于除 docker 之外的其他工具,并学习如何做这样的事情:) 谢谢你,Dave。
  • 你能让这个工作吗?也许用 net=host?

标签: docker ansible


【解决方案1】:

你的剧本是针对localhost

---
- hosts: localhost
  roles:
  - osx

这意味着 Ansible 将针对本地机器(即 也就是说,你的 Ansible 容器)在运行剧本时。 Ansible 是 旨在将剧本也应用于远程机器,通常通过 使用ssh 连接到他们。假设有可能 使用 ssh 从你的 Ansible 容器连接到你的主机,你 可以创建一个适当的库存文件,然后定位您的 适当的剧本:

---
- hosts: my_osx_host
  roles:
  - osx

如果您刚开始使用 Ansible,您可能希望从 Getting Started 文档并从那里开始工作。您会在该网站上找到文档,这些文档应该会引导您完成创建库存文件的过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-28
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    相关资源
    最近更新 更多