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

时间:2016-01-28 22:33:24

标签: docker ansible

我有一个我在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 个答案:

答案 0 :(得分:1)

问题确实是Ansible正在尝试ssh到我的本地机器。当您在Mac上运行Docker时,它会创建一个虚拟机,当您在终端中运行docker ps之类的命令时,它将针对在该虚拟机上运行的Docker Engine运行。

我最终遵循了本文中的建议:Using Vagrant and Docker Machine Together.我基于ubuntu / trusty64图像创建了一个带有vagrant的新VM,然后我使用docker create启用它以与Docker一起使用。然后我将此VM的IP添加到我的Ansible清单文件中,如下所示:

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

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

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

答案 1 :(得分:0)

当您编写ansible时,您需要确定它在何处运行

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

当你想在同一个ansible中的不同主机上运行时,你只需要再次写这个:

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

如果你把" localhost"在"主持人中:"然后它将在本地主机上运行。 如果要在特定主机上运行,​​请运行命令/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
相关问题