使用Ansible docker_image构建Dockers

时间:2015-06-30 09:30:49

标签: docker ansible ansible-playbook dockerfile dockerpy

我正在尝试使用Ansible的 docker_image 模块在一台机器上构建一堆码头工具。

我构建了1个“基础”泊坞窗图像,用作所有后续泊坞窗图像中的FROM图像。这在手动发出构建命令时起作用:

sudo docker build -t base .
sudo docker build -t postgres .

但是当我尝试对Ansible模块执行相同操作时,第二个图像(以及使用“基本”图像的所有后续图像)都会失败并显示以下错误:

TASK: [Docker | Build postgres] ************************************ 
failed: [192.168.1.120] => {"changed": true, "failed": true, "image_id": null}
msg: Error: Error: image base:latest not found
Log:Step 0 : FROM base


FATAL: all hosts have already failed -- aborting

我的Playbook中的条目是:

  - name: Docker | Build base
      docker_image: path="/home/xx/data/dockers/base/" name="base" state=present

    - name: Docker | Build postgres
      docker_image: path="/home/xx/data/dockers/postgresql/" name="postgres" state=present

当它失败时,机器上存在“基础”图像,我可以通过检查docker images来验证它。在进行手动构建时,后续映像(在本例中为postgres)也会构建。

Dockerfiles的相关摘录:

Base Dockerfile:

FROM ubuntu

MAINTAINER me

RUN apt-get update

RUN apt-get install -y \
    software-properties-common \
    wget \
    git \
    unzip \
    nano \
    vim-tiny

CMD bash

Postgres Dockerfile:

FROM base

MAINTAINER me

RUN groupadd -r postgres && useradd -r -g postgres postgres

...

因此,Ansible努力使用另一个图像作为基本图像来构建图像。我确定问题不在于Dockerfiles,因为我可以手动构建图像。我只是想用Ansible自动化构建,这给了我这个问题。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

这里的问题是docker-py模块最近有一些更新,它将首先探测图像的集线器。 docker-py不使用命令行工具,它使用自己的docker api实现并以自己的方式执行。

我建议你建立一个私人中心。您需要一个下午才能适应这个想法,并开始使用它为您的容器图像添加前缀。在构建图像时按下。启动时拉动。在你的剧本中分离这些问题。在某些情况下,忘记使用ansible docker模块,只需通过ansible的shell模块调用docker cli。这是一篇关于ansible和docker的好文章。 http://opensolitude.com/2015/05/26/building-docker-images-with-ansible.html