用Ansible构buildDocker docker_image
我正在使用Ansible的docker_image模块在一台机器上构build一堆docker 。
我构build了1个“基础”泊坞窗图像,用作所有后续泊坞窗图像中的FROM图像。 这在手动发布构build命令时起作用:
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
来validation它。 后续的图像(在这种情况下,postgres)也可以在进行手动构build时成功build立。
Dockerfiles相关摘录:
基础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努力用另一幅图像作为基本图像来build立图像。 我相信这个问题不在Dockerfiles中,因为我可以手动构build图像。 我只是试图自动与Ansible构build,这是给我的问题。
有什么build议?
这里的问题是最近有一些更新的docker-py
模块将首先探测映像的中心。 docker-py
不使用命令行工具,它使用自己的docker api实现并以自己的方式执行任务。
我会build议你build立一个私人中心。 这将需要你一个下午习惯这个想法,并开始你的容器图像前缀。 推动你build立你的形象。 拉起来,当你启动它们。 分开你的剧本中的这些问题。 在某些情况下,忘记使用可靠的docker模块,只需通过可靠的shell模块来调用dockercli即可。 这是一个关于ansible和docker的好文章。 http://opensolitude.com/2015/05/26/building-docker-images-with-ansible.html