Gurus,
I'm trying to create a docker image from a Dockerfile in an ec2 instance.
I'm able to create the ec2 instances and copy over the dockerfile fine.
However, for *every* ec2 instance I fire up, it *always* fails the first
time I try to build the docker image.
- name: Build the docker Nginx image
docker_image:
path: "{{ docker_nginx_dir }}"
state: build
name: "grid/nginx"
The ansible failure stack trace looks like:
failed: [54.*XX.XX.XX*] => {"failed": true, "parsed": false}
invalid output was: SUDO-SUCCESS-bdbbnpaupjsbudcxajoycrwmbmlehwux
Traceback (most recent call last):
File
"/home/ec2-user/.ansible/tmp/ansible-tmp-1414698075.43-175058707465136/docker_image",
line 1455, in
<m odule>
main()
File
"/home/ec2-user/.ansible/tmp/ansible-tmp-1414698075.43-175058707465136/docker_image",
line 220, in
mai n
image_id = manager.build()
File
"/home/ec2-user/.ansible/tmp/ansible-tmp-1414698075.43-175058707465136/docker_image",
line 143, in
bui ld
chunk_json = json.loads(chunk)
File "/usr/lib64/python2.6/json/__init__.py", line 307, in loads
return _default_decoder.decode(s)
File "/usr/lib64/python2.6/json/decoder.py", line 322, in decode
raise ValueError(errmsg("Extra data", s, end, len(s)))
ValueError: Extra data: line 1 column 87 - line 1 column 52865 (char 87 -
52865)
OpenSSH_6.2p2 Ubuntu-6ubuntu0.4, OpenSSL 1.0.1e 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: auto-mux: Trying existing master
debug2: fd 3 setting O_NONBLOCK
debug2: mux_client_hello_exchange: master version 4
debug3: mux_client_forwards: request forwardings: 0 local, 0 remote
debug3: mux_client_request_session: entering
debug3: mux_client_request_alive: entering
debug3: mux_client_request_alive: done pid = 24845
debug3: mux_client_request_session: session request sent
debug1: mux_client_request_session: master session id: 2
debug3: mux_client_read_packet: read header failed: Broken pipe
debug2: Received exit status from master 0
Shared connection to 54.*XX.XX.XX* closed.
Looking at the docker log file on the ec2 instance, the only obvious error
I always see is something like:
[f648bc68] -job log(start,
aab655401a74e9e6bb098c1d62d31e44beb1c116eb530296f315392a82c2e3dc,
4d76087678ee) = OK (0)
*[error] attach.go:186 attach: stdout: write unix @: broken pipe*
[error] attach.go:258 attach: job 1 returned error write unix @: broken
pipe, aborting all jobs
write unix @: broken pipe
[f648bc68] -job build() = ERR (1)
I subsequently bumped up the timeout value thinking that the ssh client was
timing out:
- name: Build the docker Nginx image
docker_image:
*timeout: 1200*
path: "{{ docker_nginx_dir }}"
state: build
name: "grid/nginx"
But it fails much before this timeout. So I added a retry condition:
- name: Build the docker Nginx image
docker_image:
timeout: 1200
path: "{{ docker_nginx_dir }}"
state: build
name: "grid/nginx"
* register: build_image_result until: not build_image_result|failed
retries: 2 delay: 30*
This seems to consistently work - and I see that it always gets called
twice - but I'm concerned as to why it would always need to. Any ideas?
Thanks!
More info if anyone needs it:
*EC2 setup*
- name: Setup AWS EC2 Instances - US-West-1
ec2:
instance_type: t2.micro
image: "ami-41a7ea71"
monitoring: no
wait: yes
group: microserver_security_group
key_name: *mykey*
instance_tags:
Name: "MicroServer"
count: 1
region: "us-west-2"
register: ec2west2
Docker install tasks:
- name: Update packages on the Amazon AMI
yum: name=* state=latest
when: ansible_distribution == 'Amazon'
- name: Install or Update Python on the Amazon AMI
yum: name=python state=latest
when: ansible_distribution == 'Amazon'
- name: Install or Update Python-pip on the Amazon AMI
yum: name=python-pip state=latest
when: ansible_distribution == 'Amazon'
- name: Install or Update Docker on the Amazon AMI
yum: name=docker state=latest
when: ansible_distribution == 'Amazon'
- name: Install or Update docker-py on all docker hosts
pip: name=docker-py version=0.3.1
# Had to delete /tmp/pip-build-root because pip would keep installing
docker-py 0.5.3 as it was cached in this directory
- name: Start the docker service on the Amazon AMI
service: name=docker state=restarted
# Trying restarted because it always seems to fail the first time around
when: ansible_distribution == 'Amazon'
Cheers.
--
You received this message because you are subscribed to the Google Groups
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/fda1e638-e0fc-4b3a-9a9e-e36d7cf41c69%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.