使用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