首页 文章

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

提问于
浏览
2

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

    问题确实是Ansible正试图进入我的本地机器 . 当您在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

    当你编写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"放在"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
    

相关问题