2016-07-04 40 views
6

Ho controllato this post e ho seguito la correzione in entrambe le risposte e nessuno dei due ha funzionato. Sto aprendo un nuovo post in parte a causa di ciò e in parte perché sto ottenendo un errore leggermente diverso anche se il problema potrebbe essere lo stesso.Ansible non può importare docker-py anche se è installato

Ansible ospite:

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

Destinazione cliente mioserver:

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

server di Ansible (ansible-playbook alias per ap):

$ ap -vvvv test.yml

L'output:

(uscita probabilmente estranea, 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'errore pertinente):

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

ottengo lo stesso errore quando eseguo il downgrade il modulo docker-py a 1.1.0 come da prima risposta nel post di riferimento. Ho anche cercato di chmod le directory e non faceva differenza:

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

da chmod -R go+rx docker*.

Qualcuno ha visto questo prima? Ho provato a utilizzare il modulo ansible per installare i moduli e dopo averli rimossi manualmente, li ho reinstallati manualmente come nel post di riferimento. Sto anche usando 2.1.0.0. come puoi vedere, che avrebbe dovuto risolvere il problema.

risposta

0

I requisiti per il modulo finestra mobile-py sulla documentazione del ansible per la finestra mobile * moduli non è davvero up-to-date, ma in generale qui ci sono alcune ansible - coppie docker-py che dovrebbero funzionare:

  • Ansible 2.1.0.0 richiede almeno la versione 1.7.0 di docker-py, che a sua volta richiede almeno una finestra di ancoraggio 1.9 installata sul client.

  • Se è necessario utilizzare una versione precedente della finestra mobile, è possibile utilizzare la finestra mobile 1.7 con ansible 2.0.1.0 e docker-py 1.4.0.

  • Se avete bisogno di una versione ancora più vecchia della finestra mobile, come 1.6 poi si sono bloccati con ansible 1,9

+1

Cheers, ma come ho 2.1.0.0 sul server, e ho provato 1.7.0 finestra mobile-py con 1.11 finestra mobile a! Avail. Ho una soluzione alternativa per le persone frustrate là fuori che è sempre avviare il contenitore del registro con name = registry e quindi nel playbook usare 'docker ps --filter = name = registry -q' e registrare l'output come var, quindi usa comandi di shell come 'docker stop {{docker_regID.stdout}}' ecc. – volvox

+0

@SztupY vuoi dire che il telecomando deve avere Docker installato o il locale deve averlo installato? In realtà sta comunicando attraverso il Docker Daemon? – Breedly

3

Questo perché le nuove versioni di moduli Python docker e docker-py che usi ansible sono incompatibili. Ho dovuto tornare indietro e specificare esplicitamente le seguenti versioni dei pacchetti PIP:

  • finestra mobile: 2.0.0
  • finestra mobile-py: 1.10.6

Esempio compito playbook per queste:

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

Tutti i miei libri giochi funzionano bene da allora.

2

Per me specificare il percorso per docker-py funzionato.

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

Fondamentalmente Ansible stava cercando nella directory sbagliata.

credito completa a Clay Graham per la sua grande articolo sul tema:

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

+0

Grazie per il puntatore al problema ... Per me, il problema era che l'host Docker remoto (RHEL7) aveva installato il pacchetto python-urllib3 in /usr/lib/python2.6/, invece di/usr/lib/python2.7 /. Estendere il PYTHONPATH nel mio script Ansible come descritto da Clay Graham mi ha fatto andare di nuovo. – Bernie

Problemi correlati