2016-07-04 21 views
6

Sprawdziłem this post i podążałem za poprawką w obu odpowiedziach i nic nie zadziałało. Otwieram nowy post częściowo z tego powodu, a częściowo dlatego, że dostaję nieco inny błąd, mimo że problem może być taki sam.Komunikat nie może importować docker-py, mimo że jest zainstalowany

ansibl host:

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

Docelowy klient mójserwer:

$ 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 
... 

serwer ansibl (ansibl-PlayBook aliasem ap):

$ ap -vvvv test.yml

Wyjście:

(wyjście prawdopodobnie obcy, ucięte):

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": 

(Stosowny błędu):

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

uzyskać ten sam błąd podczas downgrade moduł docker-py do wersji 1.1.0 zgodnie z pierwszą odpowiedzią w przywołanym poście. Próbowałem też chmod katalogi i nie ma różnicy:

(/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/ 

od chmod -R go+rx docker*.

Czy ktoś to widział wcześniej? Próbowałem użyć modułu pip ansible do zainstalowania modułów, a następnie po ich ręcznym usunięciu, ponownie je zainstalowałem ręcznie, jak w przywołanym poście. Używam również wersji 2.1.0.0. jak widać, co miało naprawić ten problem.

Odpowiedz

0

Wymagania dla modułu doker-py na dokumentacji ansibl za okres dokowanym * moduły naprawdę nie jest up-to-date, ale generalnie oto kilka ansibl - dokowane-py par, które powinny działać:

  • Ansible 2.1.0.0 wymaga co najmniej wersji docker-1.7.0, która z kolei wymaga zainstalowania co najmniej docker 1.9 na kliencie.

  • Jeśli potrzebujesz użyć starszej wersji okna dokowanego, możesz użyć okna dokowanego 1.7 z ansible 2.0.1.0 i docker-py 1.4.0.

  • Jeśli potrzebujesz jeszcze starszą wersję docker, jak 1,6 potem utkniesz z ansibl 1,9

+1

Wiwaty, ale jak mam 2.1.0.0 na serwerze, i próbowali 1.7.0 Döcker-Py z 1.11 dokowania do! Pomocy. Mam obejście dla każdego sfrustrowanego użytkownika, który zawsze uruchamia kontener rejestru o nazwie = rejestr, a następnie w książce "użyj" docker ps --filter = name = registry -q' i zarejestruj dane wyjściowe jako var, a następnie użyj poleceń powłoki, takich jak 'docker stop {{docker_regID.stdout}}' itp. – volvox

+0

@SztupY masz na myśli, że pilot musi mieć zainstalowany Docker lub lokalny musi go zainstalować? Czy rzeczywiście komunikuje się za pośrednictwem Docker Daemon? – Breedly

3

To dlatego, że nowe wersje modułów Pythona docker i docker-py że ansibl zastosowania są niezgodne. Musiałem wrócić i wyraźnie określić następujące wersje pakietów PIP:

  • doker: 2.0.0
  • doker-py: 1,10.6

Próbka PlayBook zadanie dla nich:

- 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 } 

Wszystkie moje książki odtwarzania działa dobrze, ponieważ wtedy.

2

Dla mnie działająca ścieżka do docker-py.

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

Zasadniczo Ansible szukał w niewłaściwym katalogu.

pełny kredyt Clay Grahama za swojego wielkiego artykułu o numerze:

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

+0

Dzięki za wskaźnik do problemu ... Problem polegał na tym, że zdalny Docker (RHEL7) zainstalował pakiet python-urllib3 w /usr/lib/python2.6/, zamiast/usr/lib/python2.7 /. Rozszerzanie PYTHONPATH w moim skrypcie Ansible w sposób opisany przez Claya Grahama sprawiło, że znowu podjąłem się. – Bernie

Powiązane problemy