2016-07-04 17 views
6

Tôi đã kiểm tra this post và làm theo cách khắc phục trong cả hai câu trả lời và không hoạt động. Tôi đang mở một bài viết mới một phần vì điều đó và một phần vì tôi nhận được một lỗi hơi khác nhau mặc dù vấn đề có thể giống nhau.Ansible không thể nhập docker-py ngay cả khi nó được cài đặt

Ansible host:

$ ansible --version 
ansible 2.1.0.0 
    config file = /etc/ansible/ansible.cfg 
    configured module search path = Default w/o overrides 

Điểm đến khách hàng myserver:

$ pip list | egrep 'six|docker|websocket_client' 
docker-py (1.2.3) 
six (1.10.0) 

test.yml:

--- 
- hosts: myserver 
    remote_user: root 
    tasks: 
    - name: stop any running docker registries 
    docker_container: 
     name: registry 
     state: stopped 
... 

Ansible máy chủ (ansible-playbook aliased để ap):

$ ap -vvvv test.yml

Sản lượng:

(đầu ra có thể không liên quan, snipped):

fatal: [myserver]: FAILED! => { 
    "changed": false, 
    "failed": true, 
    "invocation": { 
     "module_args": { 
      "api_version": null, 
      "blkio_weight": null, 
      "cacert_path": null, 
      "capabilities": null, 
      "cert_path": null, 
      "command": null, 
      "cpu_period": null, 
      "cpu_quota": null, 
      "cpu_shares": null, 
      "cpuset_cpus": null, 
      "cpuset_mems": null, 
      "debug": false, 
      "detach": true, 
      "devices": null, 
      "dns_opts": null, 
      "dns_search_domains": null, 
      "dns_servers": null, 
      "docker_host": null, 
      "entrypoint": null, 
      "env": null, 
      "etc_hosts": null, 
      "exposed_ports": null, 
      "filter_logger": false, 
      "force_kill": false, 
      "groups": null, 
      "hostname": null, 
      "image": null, 
      "interactive": false, 
      "ipc_mode": null, 
      "keep_volumes": true, 
      "kernel_memory": null, 
      "key_path": null, 
      "kill_signal": null, 
      "labels": null, 
      "links": null, 
      "log_driver": 
      "json-file", 
      "log_options": null, 
      "mac_address": null, 
      "memory": "0", 
      "memory_reservation": null, 
      "memory_swap": null, 
      "memory_swappiness": null, 
      "name": "registry", 
      "network_mode": null, 
      "networks": null, 
      "oom_killer": null, 
      "paused": false, 
      "pid_mode": null, 
      "privileged": false, 
      "published_ports": null, 
      "pull": false, 
      "read_only": false, 
      "recreate": false, 
      "restart": false, 
      "restart_policy": null, 
      "restart_retries": 0, 
      "security_opts": null, 
      "shm_size": null, 
      "ssl_version": null, 
      "state": "stopped", 
      "stop_signal": null, 
      "stop_timeout": null, 
      "timeout": null, 
      "tls": null, 
      "tls_hostname": null, 
      "tls_verify": null, 
      "trust_image_content": false, 
      "tty": false, 
      "ulimits": null, 
      "user": null, 
      "uts": null, 
      "volume_driver": null, 
      "volumes": null, 
      "volumes_from": null 
     }, 
     "module_name": "docker_container" 
    }, 
    "msg": 

(lỗi thích hợp):

"Failed to import docker-py - cannot import name NotFound. Try pip install docker-py"}

tôi nhận được lỗi tương tự khi tôi hạ cấp mô-đun docker-py đến 1.1.0 theo câu trả lời đầu tiên trong bài được tham chiếu. Tôi cũng đã cố gắng chmod các thư mục và nó không có sự khác biệt:

(/usr/lib/python2.7/site-packages) myserver$ ls -lad docker* 
drwxr-xr-x. 6 root root 4096 Jul 4 10:57 docker/ 
drwxr-xr-x. 2 root root 4096 Jul 4 10:57 docker_py-1.2.3-py2.7.egg-info/ 

từ chmod -R go+rx docker*.

Có ai nhìn thấy điều này trước đây không? Tôi đã cố gắng sử dụng mô-đun pip ansible để cài đặt các mô-đun và sau đó sau khi gỡ bỏ chúng bằng tay, cài đặt lại chúng theo cách thủ công như trong bài tham chiếu. Tôi cũng đang sử dụng 2.1.0.0. như bạn có thể thấy, đó là nghĩa vụ phải khắc phục vấn đề này.

Trả lời

0

Các yêu cầu đối với các mô-đun Docker-py trên tài liệu ansible cho các Docker * module là không thực sự to-date lên, nhưng nhìn chung đây là một số ansible - cặp Docker-py mà nên làm việc:

  • Ansible 2.1.0.0 yêu cầu phiên bản docker-py 1.7.0 ít nhất, do đó yêu cầu ít nhất docker 1.9 được cài đặt trên máy khách.

  • Nếu bạn cần sử dụng phiên bản docker cũ hơn, bạn có thể sử dụng docker 1.7 với phiên bản 2.0.1.0 và docker-py 1.4.0.

  • Nếu bạn cần một phiên bản thậm chí cũ của Docker, như 1.6 thì bạn đang mắc kẹt với ansible 1,9

+1

Chúc mừng, nhưng như tôi đã có 2.1.0.0 trên máy chủ, và đã cố gắng 1.7.0 Docker-py với 1,11 docker đến! Avail. Tôi có một cách giải quyết cho bất kỳ người thất vọng nào ở đó là luôn luôn bắt đầu container đăng ký với name = registry và sau đó trong playbook sử dụng 'docker ps --filter = name = registry -q' và đăng ký đầu ra dưới dạng var, sau đó sử dụng các lệnh shell chẳng hạn như 'docker stop {{docker_regID.stdout}}' vv – volvox

+0

@SztupY bạn có nghĩa là điều khiển từ xa phải có Docker được cài đặt hay địa phương phải cài đặt nó? Nó thực sự giao tiếp thông qua Docker Daemon? – Breedly

3

Điều này là do phiên bản mới của module python dockerdocker-py rằng sử dụng ansible không tương thích. Tôi đã phải quay trở lại và chỉ định rõ ràng các phiên bản sau của gói PIP:

  • Docker: 2.0.0
  • Docker-py: 1.10.6

Mẫu nhiệm vụ playbook cho các:

- name: install certain python modules for docker 
    pip: 
    name: "{{ item.name }}" 
    version: "{{ item.version }}" 
    state: present 
    with_items: 
    - { name: docker, version: 2.0.0 } 
    - { name: docker-py, version: 1.10.6 } 

Tất cả sách vở kịch của tôi hoạt động tốt kể từ đó.

2

Để tôi chỉ định đường dẫn đến docker-py đã hoạt động.

- hosts: <host> 
    environment: 
    PYTHONPATH: "/home/path/.local/lib/python2.7/site-packages" 

Về cơ bản Ansible đang tìm trong thư mục sai.

tín dụng đầy đủ để Clay Graham cho bài viết tuyệt vời của ông về vấn đề này:

https://medium.com/dronzebot/ansible-and-docker-py-path-issues-and-resolving-them-e3834d5bb79a

+0

Cảm ơn con trỏ cho vấn đề ... Đối với tôi, vấn đề là máy chủ Docker từ xa (RHEL7) đã cài đặt gói python-urllib3 vào /usr/lib/python2.6/, thay vì/usr/lib/python2.7 /. Mở rộng PYTHONPATH trong kịch bản Ansible của tôi như mô tả của Clay Graham đã cho tôi đi một lần nữa. – Bernie

Các vấn đề liên quan