2016-01-28 75 views
2

我有一个Rails应用程序,我正在部署在Docker容器中。我想从Docker容器开发,以便在不同环境之间保持一致。使用Ansible在docker-machine上启动Docker容器?

我有一个Ansible playbook,启动远程服务器上的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是做本地的ssh到Mac,但我需要它连接到码头机。

如何使用Ansible在我的Mac上运行的Docker容器上运行任务?

+0

您是否尝试安装'docker-py'?它抱怨这一点。 – ipinak

+0

是的,并且当剧本运行时,它会安装docker-py并报告确定,并且在下一步它会抱怨没有docker-py。但我认为这是因为Ansible试图在我的Mac上运行这些程序,而不是在我的Mac上的docker-machine上运行。也许。 –

+0

如果您的怀疑是正确的,那么尝试在Mac上安装docker-py,看看会发生什么。 – ipinak

回答

1

问题确实是Ansible试图ssh到我的地方机。当您在Mac上运行Docker时,它会创建一个虚拟机,当您在终端中运行诸如docker ps的命令时,它将运行在该虚拟机上运行的Docker引擎。

我结束了以下这篇文章中的建议:Using Vagrant and Docker Machine Together.我创建了一个基于ubuntu/trusty64映像的vagrant的新VM,然后启用它与Docker一起使用,使用docker create。然后我加入这个虚拟机的IP给我Ansible清单文件,像这样:

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

这是一个有点尴尬,因为没有办法让这个新的虚拟机是码头工人工具箱使用默认的一个,但除此之外,它是一个不错的方式来控制虚拟机的主机操作系统。

我想再次尝试docker-compose,因为我认为它可能对本地开发更好,但能够运行相同的手册以部署到任何环境是很好的。

0

当你在那里运行

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

当你想在同一ansible不同的主机上运行写,你需要确保ansible你只需要重新写:

- 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