我有一个我在Docker容器中部署的Rails应用程序 . 我想从Docker容器进行开发,因此它将在环境之间保持一致 .
我有一个Ansible playbook,可以启动远程服务器上的Docker容器,而且运行正常 . 我以为我会使用相同的Ansible任务启动容器并在Mac上将它们链接在一起 .
但是,当我对我的本地实例运行playbook时,我得到的错误如下:
fatal: [localhost]: FAILED! => {"changed": false, "failed": true, "msg": "`docker-py` doesn't seem to be installed, but is required for the Ansible Docker module."}
似乎问题是Ansible正在为Mac做本地ssh,但我需要它连接到docker-machine .
如何使用Ansible在我的Mac上运行的Docker容器上运行任务?
2 回答
问题确实是Ansible正试图进入我的本地机器 . 当您在Mac上运行Docker时,它会创建一个虚拟机,当您在终端中运行
docker ps
等命令时,它将针对在该虚拟机上运行的Docker Engine运行 .我最终遵循了本文中的建议:Using Vagrant and Docker Machine Together.我基于ubuntu / trusty64映像创建了一个带有vagrant的新VM,然后我使用
docker create
启用它以与Docker一起使用 . 然后我将此VM的IP添加到我的Ansible清单文件中,如下所示:这有点尴尬,因为没有办法让这个新VM成为Docker Toolbox使用的默认VM,但是否则它是控制虚拟机主机操作系统的好方法 .
我正在尝试使用docker-compose,因为我认为它可能对本地开发更好,但是能够运行相同的playbook来部署到任何环境都是很好的 .
当你编写ansible时,你需要确保它在哪里运行
如果要在同一个ansible中的不同主机上运行,只需再次编写:
如果您将"localhost"放在"hosts:"中,那么它将在本地主机上运行 . 如果要在特定主机上运行,请运行命令
/etc/ansible/hosts --refresh-cache
并使用结果中的标记 .例如,如果结果是
并且你想在所有这些上运行命令只是使用: