使用Ansible在docker-machine上启动Docker容器?

我有一个我在Docker容器中部署的Rails应用程序。 我想从Docker容器进行开发,以便在环境之间保持一致。

我有一个Ansible的手册,启动远程服务器上的Docker容器,这工作正常。 我以为我会使用相同的Ansible任务来启动容器,并将它们连接到我的Mac上。

但是,当我对本地实例运行该手册时,出现如下错误:

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容器上运行任务?

这个问题确实是Ansible正试图插入我的本地机器。 在Mac上运行Docker时,它会创build一个虚拟机,当您在terminal中运行像docker ps这样的命令时,它将运行在该虚拟机上运行的Docker Engine。

我结束了本文中的build议:共同使用Vagrant和Docker机器。 我使用vagrant创build了一个基于ubuntu / trusty64映像的新虚拟机,然后使用docker create将它启用以用于Docker。 然后我把这个VM的IP添加到我的Ansible库存文件中,如下所示:

 192.168.99.101 ansible_user=vagrant ansible_ssh_private_key_file=/path/to/virtualbox/private_key 

这有点尴尬,因为没有办法让这个新的虚拟机成为Docker Toolbox使用的默认虚拟机,否则这是控制虚拟机的主机操作系统的好方法。

我正在尝试docker-compose,因为我认为这对本地开发可能会更好,但是能够运行相同的playbook来部署到任何环境是很好的。

当你写出来的时候,你需要确定它在哪里运行

 - hosts: HOSTS_TO_RUN_FOLLOWING_TASKS tasks: - name: NAME_OF_TASK shell: SHELL_CMD 

当你想在同一个不同的主机上运行时,你只需要重新写一遍:

 - hosts: NEW_HOST_TO_RUN_TASKS tasks: - name: NAME_OF_TASK shell: SHELL_CMD 

如果你把“localhost”放在“hosts”中,那么它将在本地主机上运行。 如果你想在特定的主机上运行,​​那么运行命令/etc/ansible/hosts --refresh-cache并在结果中使用标签。

例如,如果结果是

 "tag_Name_Production": [ "124.125.125.121", "124.125.125.122", "124.125.125.123" ] 

而你想在所有这些上运行这个命令只需要使用:

 - hosts: tag_Name_Production tasks: - name: NAME_OF_TASK shell: SHELL_CMD