我已经用ansible自动设置了多个Docker容器。这工作得很好,但是在Docker容器中必须执行某些重复性任务。

可以使用docker连接驱动程序实现ansible的实现,但这仅在ansible在作为dockerRunner的主机上运行时才有效。事实并非如此,如果可能的话,我不想在多个主机上运行ansible。

//我出于好奇而尝试了它,并且直接在码头工人上使用ansible效果很好,...无论如何我都不喜欢解决方案。

评论

这个stackoverflow.com/a/41626257/3888850怎么样?

好,谢谢!不知道为什么我没有自己找到那个帖子,.. o.O那会带来一些安全隐患,但是我可以解决!当我有机会尝试时,我将重新报告该问题,...

@Levi:感谢您的帮助,我回答了自己的帖子,以一种更易理解的方式对其进行了描述。

我认为docker图片应该是不可变的且无状态的。

@ 030我认为这取决于容器中的应用程序。在我的场景中,需要集中触发应用程序的签名更新和操作,我需要从外部验证docker容器中进程的进度是否触发SDN功能

#1 楼

借助于@Levi(参考Stackoverflow),我设法找到一种方法,使用ansibles docker连接驱动程序和Docker的远程API功能将straigt连接到docker容器中。

首先,您必须公开API,默认情况下并非如此。只需将-H tcp://0.0.0.0:1337添加到systemd脚本的ExecStart常量即可。然后重新加载启动脚本并重新启动docker服务。 (来自此博客文章)

然后您可以像这样在清单文件中列出容器: to。

[containers]
container-name ansible_connection=docker ansible_docker_extra_args="-H tcp://1.2.3.4:1337"


这种实现方式的好处是,您可以混合通过SSH和Docker容器维护的“真实”主机/虚拟机。我不得不提到的一件事是,与使用SSH作为控制隧道相比,docker API的运行速度要慢得多。

此设置是非常不安全的,其唯一目的是解释该概念。在生产环境中使用它之前,您应该阅读安全功能,并尽可能限制对守护程序的访问。

评论


就像您说的那样,对于远程服务来说不安全,但是对于本地开发来说是一个很好的解决方案! +1

–马特奥(Mattao Gaggiano)
20年4月4日在15:13

#2 楼

它可以是三步过程



使用以下命令创建剧本-

docker exec mycontainer /bin/sh -c "cmd1;cmd2;...;cmdn"

Docker文件入口点选项

FROM ubuntu
ENTRYPOINT ["top", "-b"]
CMD ["-c"]


ansible-playbook playbooks/PLAYBOOK_NAME.yml --limit "mycontainer"


评论


我看不到如何回答这个问题,您应该进行编辑以添加一些关于它如何远程工作的说明(而不是在Docker主机上)

–滕西拜
18年7月4日在15:23

我认为您有点误解了这个问题。我知道如何从主机系统执行docker容器中的命令,但我不仅想执行命令。我希望能够将Ansible用于docker容器,就像它们是独立主机一样。

– davidb
18年7月4日在17:35