Tôi chỉ cố gắng để nói với Ansible để xây dựng một hình ảnh Docker trên máy tính OS X của tôi và đây là lỗi tôi nhận được:vấn đề sử dụng Ansible để chạy nhiệm vụ Docker trên OS X
$ ansible-playbook main.yml
PLAY [localhost] **************************************************************
GATHERING FACTS ***************************************************************
ok: [localhost]
TASK: [Build docker image from dockerfiles] ***********************************
failed: [localhost] => {"changed": false, "failed": true}
msg: ConnectionError(ProtocolError('Connection aborted.', error(2, 'No such file or directory')),)
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/ronny/main.retry
localhost : ok=1 changed=0 unreachable=0 failed=1
Đây là chính. yml tập tôi đang sử dụng:
---
- hosts: localhost
connection: local
tasks:
- name: Build docker image from dockerfiles
docker_image:
name: testimage
path: test
state: build
My Dockerfile:
# Build an example Docker container image.
FROM busybox
MAINTAINER Jeff Geerling <[email protected]>
# Run a command when the container starts.
CMD ["/bin/true”]”
tập tin Docker của tôi nằm ở cookbook/te st/Dockerfile
Và file main.yml tọa lạc tại cookbook/main.yml
Tôi đang chạy này trên OS X.
Tôi hoàn toàn bị mất vào thời điểm này và bất kỳ giúp đỡ sẽ rất được đánh giá cao.
chỉnh sửa:
Để đối phó với yêu cầu Nathanials mà tôi sử dụng -vvvv tôi nhận được lỗi sau:
(đây là nơi mà con đường được thiết lập để các thư mục con "test")
TASK: [Build docker image from dockerfiles] ***********************************
<localhost> ESTABLISH CONNECTION FOR USER: ronny
<localhost> REMOTE_MODULE docker_image name=test state=build path=test
<localhost> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/ronny/.ansible/cp/ansible-ssh-%h-%p-%r" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 localhost /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1433079033.35-4833710313724 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1433079033.35-4833710313724 && echo $HOME/.ansible/tmp/ansible-tmp-1433079033.35-4833710313724'
<localhost> PUT /var/folders/s1/g6kswg952gvg5df6wld173480000gn/T/tmp3g0PIz TO /Users/ronny/.ansible/tmp/ansible-tmp-1433079033.35-4833710313724/docker_image
<localhost> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/ronny/.ansible/cp/ansible-ssh-%h-%p-%r" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 localhost /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /Users/ronny/.ansible/tmp/ansible-tmp-1433079033.35-4833710313724/docker_image; rm -rf /Users/ronny/.ansible/tmp/ansible-tmp-1433079033.35-4833710313724/ >/dev/null 2>&1'
failed: [localhost] => {"failed": true, "parsed": false}
Traceback (most recent call last):
File "/Users/ronny/.ansible/tmp/ansible-tmp-1433079033.35-4833710313724/docker_image", line 1852, in <module>
main()
File "/Users/ronny/.ansible/tmp/ansible-tmp-1433079033.35-4833710313724/docker_image", line 235, in main
image_id = manager.build()
File "/Users/ronny/.ansible/tmp/ansible-tmp-1433079033.35-4833710313724/docker_image", line 140, 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/site-packages/docker/client.py", line 319, in build
raise TypeError("You must specify a directory to build in path")
TypeError: You must specify a directory to build in path
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: 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 = 78798
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 localhost closed.
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/ronny/main.retry
localhost : ok=1 changed=0 unreachable=0 failed=1
Để trả lời lỗi trên, tôi đã thử cung cấp đường dẫn đầy đủ đến thư mục xây dựng nơi Dockerfile được đặt
path: "/Users/ronny/projects/dockers/tutorial/ansibledocker/test”
sau đó tôi nhận:
TASK: [Build docker image from dockerfiles] ***********************************
<localhost> ESTABLISH CONNECTION FOR USER: ronny
<localhost> REMOTE_MODULE docker_image name=test state=build path=/Users/ronny/projects/dockers/tutorial/ansibledocker/test
<localhost> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/ronny/.ansible/cp/ansible-ssh-%h-%p-%r" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 localhost /bin/sh -c 'mkdir -p $HOME/.ansible/tmp/ansible-tmp-1433079137.87-213359153110012 && chmod a+rx $HOME/.ansible/tmp/ansible-tmp-1433079137.87-213359153110012 && echo $HOME/.ansible/tmp/ansible-tmp-1433079137.87-213359153110012'
<localhost> PUT /var/folders/s1/g6kswg952gvg5df6wld173480000gn/T/tmplH4Lln TO /Users/ronny/.ansible/tmp/ansible-tmp-1433079137.87-213359153110012/docker_image
<localhost> EXEC ssh -C -tt -vvv -o ControlMaster=auto -o ControlPersist=60s -o ControlPath="/Users/ronny/.ansible/cp/ansible-ssh-%h-%p-%r" -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o ConnectTimeout=10 localhost /bin/sh -c 'LANG=en_US.UTF-8 LC_CTYPE=en_US.UTF-8 /usr/bin/python /Users/ronny/.ansible/tmp/ansible-tmp-1433079137.87-213359153110012/docker_image; rm -rf /Users/ronny/.ansible/tmp/ansible-tmp-1433079137.87-213359153110012/ >/dev/null 2>&1'
failed: [localhost] => {"changed": false, "failed": true}
msg: ConnectionError(ProtocolError('Connection aborted.', error(2, 'No such file or directory')),)
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/ronny/main.retry
localhost : ok=1 changed=0 unreachable=0 failed=1
chỉnh sửa # 2
OK, tôi đã cố gắng làm điều gì đó khác nhau. thay vì xây dựng một hình ảnh, tôi đã cố gắng để bắt đầu một hình ảnh. Sau khi diggin trong lib/python2.7/site-packages/ansible/modules/core/cloud/docker/docker.py Tôi nhận thấy rằng trong lớp DockerManager.init quanh dòng 558, chúng đặt một vài biến môi trường:
env_host = os.getenv('DOCKER_HOST')
env_docker_verify = os.getenv('DOCKER_TLS_VERIFY')
env_cert_path = os.getenv('DOCKER_CERT_PATH')
env_docker_hostname = os.getenv('DOCKER_TLS_HOSTNAME')
Vì vậy, tôi giải thích những giá trị đó thành một tệp nhật ký và không nhìn thấy, không có giá trị nào được đặt.
Sau đó, khi tôi đặt chúng trực tiếp trong main.yml:
- name: start container
docker:
name: mydata
image: busybox
state: present
environment:
DOCKER_HOST: tcp://192.168.59.103:2376
DOCKER_TLS_VERIFY: 1
DOCKER_CERT_PATH: /Users/ronny/.boot2docker/certs/boot2docker-vm
DOCKER_TLS_HOSTNAME: boot2docker
tôi đã có thể thành công bắt đầu một container!
Tuy nhiên, phương pháp này không hoạt động với vấn đề ban đầu của tôi, đó là xây dựng hình ảnh trên đế.
Đào hơn nữa trong docker_image.py tôi nhận thấy rằng nó phá vỡ xuống xung quanh dòng 188 (tôi nói "xung quanh" bởi vì tôi đã đăng nhập phá vỡ vì vậy tôi không biết chính xác dòng), nơi nó có đoạn mã sau:
images = self.client.images()
để tìm hiểu thêm và tôi thấy bản thân đó.khách hàng được kiểm tra ra các docker_url tại 'unix://var/run/docker.sock'
nhưng qua tại link này tôi thấy rằng /var/run/docker.sock không tồn tại trên OS X, thay vì một câu trả lời nói rằng
/var/run/docker.sock will not be on your OSX filesystem - the Docker daemon is running inside the boot2docker VM - and that's where the unix socket is.
That serial file is also not related to the docker socket.
oyu need to talk to the TCP socket specified in the DOCKER_HOST env.
bây giờ tôi cố gắng đặt docker_url thành URL DOCKER_HOST, làm mô tả cho mô-đun này cho biết:
docker_url: description: - URL of docker host to issue commands to required: false default: unix://var/run/docker.sock aliases: []
nhưng khi tôi đặt địa chỉ này thành địa chỉ DOCKER_HOST, tôi gặp lỗi.
Đây là main.yml
- name: Build docker image from dockerfiles
docker_image:
name: testimage
# path: test
path: /Users/ronny/projects/dockers/tutorial/ansibledocker/test
state: build
docker_url: 192.168.59.103:2376
và đây là lỗi:
failed: [localhost] => {"changed": false, "failed": true}
msg: ConnectionError(ProtocolError('Connection aborted.', BadStatusLine('\x15\x03\x01\x00\x02\x02\n',)),)
FATAL: all hosts have already failed -- aborting
PLAY RECAP ********************************************************************
to retry, use: --limit @/Users/ronny/main.retry
localhost : ok=3 changed=0 unreachable=0 failed=1
Bất kỳ ý tưởng?
bạn đang sử dụng một cái gì đó giống như bot2docker để chạy các hình ảnh trong một vm? Docker sẽ không chạy trên MacOS. – errata
chỉ cho tôi mẫu của 'Dockerfile', – BMW
@ BMW- Tôi đã chỉnh sửa câu hỏi của mình ở trên để bạn có thể thấy Dockerfile – ron