Hello,
I’m trying to use Docker with Ansible to build a Docker image, but am running into an issue. Any help would be appreciated.
Basically, I want to put my docker files in my role’s ‘files’ directory and not have to specify a path for the docker_image task. Or, if I do have to specify a path, I’d like it to be relative.
Ansible → v1.7.1
Python ->2.7.6
Docker-py → 0.5.0
Relevant bit of my Ansible files look like this, following the Best Practices section of the docs:
roles/jenkins-slave/tasks/main.yml
roles/jenkins-slave/files/Dockerfile
My task in that main.yml looks like this:
- name: check or build jenkins-slave image
docker_image: name=jenkins_java8 state=present
Note the lack of a path variable, which according to the docs is not a required field.
When I run ansible-playbook, which then runs that task, I get this:
TASK: [jenkins-slave | check or build jenkins-slave image] ********************
fatal: [bucket1.closely.com] => failed to parse: SUDO-SUCCESS-pmqhkrvacsxgejgtwrskjhunvzyegvbj
Traceback (most recent call last):
File “/home/closely/.ansible/tmp/ansible-tmp-1411528307.53-162772271271910/docker_image”, line 1598, in
main()
File “/home/closely/.ansible/tmp/ansible-tmp-1411528307.53-162772271271910/docker_image”, line 234, in main
image_id = manager.build()
File “/home/closely/.ansible/tmp/ansible-tmp-1411528307.53-162772271271910/docker_image”, line 139, in build
stream = self.client.build(self.path, tag=‘:’.join([self.name, self.tag]), nocache=self.nocache, rm=True, stream=True)
File “/usr/local/lib/python2.7/dist-packages/docker/client.py”, line 386, in build
raise TypeError(“Either path or fileobj needs to be provided.”)
TypeError: Either path or fileobj needs to be provided.FATAL: all hosts have already failed – aborting
Specifying an absolute path for docker_image works, but that seems less than ideal. I haven’t found a relative path that works at all.
I’m admittedly a n00b to Ansible, so it’s very likely I’m missing something very basic here. Any kind of debugging help would be useful too - like how could I trap the actual issued command to see what it thinks the path is?
Thanks,
topher