Ansible: No se pudo importar docker-py para el módulo docker_container

Creado en 20 ene. 2017  ·  64Comentarios  ·  Fuente: ansible/ansible

TIPO DE PROBLEMA

  • Informe de error
NOMBRE DEL COMPONENTE


docker_container

VERSION ANSIBLE
- Pegue la salida literal de "ansible --version" entre las comillas a continuación
ansible 2.3.0 (devel 216e2c8813) last updated 2017/01/20 09:22:29 (GMT +000)
ansible 2.2.0.0 (detached HEAD cdec853e37) last updated 2017/01/20 09:25:31 (GMT +000)
CONFIGURACIÓN

nada ha cambiado

SO / MEDIO AMBIENTE


Máquina Linux1 3.16.0-4-amd64 # 1 SMP Debian 3.16.36-1 + deb8u1 (2016-09-03) x86_64 GNU / Linux

lista de pips:

pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
chardet (2.3.0)
colorama (0.3.7)
defusedxml (0.4.1)
docker (2.0.2)
docker-compose (1.10.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
docutils (0.12)
enum34 (1.1.6)
functools32 (3.2.3.post2)
iotop (0.6)
ipaddress (1.0.18)
jsonschema (2.5.1)
Pillow (2.6.1)
pip (9.0.1)
Pygments (2.0.1)
python-apt (0.9.3.12)
python-debian (0.1.27)
python-debianbts (1.11)
PyYAML (3.12)
reportbug (6.6.3)
requests (2.11.1)
roman (2.0.0)
setuptools (5.5.1)
six (1.10.0)
SOAPpy (0.12.22)
texttable (0.8.7)
websocket-client (0.40.0)
wstools (0.4.3)

Python --versión
Python 2.7.9

información de docker

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.12.3
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge null overlay host
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options:
Kernel Version: 3.16.0-4-amd64
Operating System: Debian GNU/Linux 8 (jessie)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.963 GiB
Name: machine1
ID: PD6F:VQDI:VAK4:O3YU:PWDT:HFAG:T3Z4:FNP5:QLT7:C3TO:7OKS:OODH
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No oom kill disable support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
Insecure Registries:
 127.0.0.0/8
RESUMEN

Cuando se usa el módulo docker_container , falla cada vez con

"Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"
PASOS PARA REPRODUCIR
- Para errores, muestre exactamente cómo reproducir el problema, utilizando un caso de prueba mínimo. Para nuevas funciones, muestre cómo se utilizaría la función.

  - docker_container:
      image: hello-world
      name: hello
- También puede pegar enlaces a gist.github.com para archivos más grandes
RESULTADOS PREVISTOS

Se ejecuta la imagen.

RESULTADOS ACTUALES
- ¿Lo que realmente pasó? Si es posible, ejecute con más verbosidad (-vvvv)

TASK [docker-registry : docker_container] **************************************
task path: /vagrant/service-playbooks/roles/docker-registry/tasks/registry-server.yml:56
Using module file /home/vagrant/ansible/lib/ansible/modules/core/cloud/docker/docker_container.py
<192.168.77.201> ESTABLISH SSH CONNECTION FOR USER: deploy
<192.168.77.201> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.77.201 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817 `" && echo ansible-tmp-1484904632.51-163570270155817="` echo $HOME/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817 `" ) && sleep 0'"'"''
<192.168.77.201> PUT /tmp/tmpeXfDvf TO /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/docker_container.py
<192.168.77.201> SSH: EXEC sftp -b - -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r '[192.168.77.201]'
<192.168.77.201> ESTABLISH SSH CONNECTION FOR USER: deploy
<192.168.77.201> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.77.201 '/bin/sh -c '"'"'chmod u+x /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/ /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/docker_container.py && sleep 0'"'"''
<192.168.77.201> ESTABLISH SSH CONNECTION FOR USER: deploy
<192.168.77.201> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r -tt 192.168.77.201 '/bin/sh -c '"'"'/usr/bin/python /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/docker_container.py; rm -rf "/home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/" > /dev/null 2>&1 && sleep 0'"'"''
fatal: [machine_1]: FAILED! => {
    "changed": false,
    "failed": true,
    "invocation": {
        "module_args": {
            "api_version": null,
            "blkio_weight": null,
            "cacert_path": null,
            "capabilities": null,
            "cert_path": null,
            "cleanup": false,
            "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,
            "env_file": null,
            "etc_hosts": null,
            "exposed_ports": null,
            "filter_logger": false,
            "force_kill": false,
            "groups": null,
            "hostname": null,
            "ignore_image": false,
            "image": "hello-world",
            "interactive": false,
            "ipc_mode": null,
            "keep_volumes": true,
            "kernel_memory": null,
            "key_path": null,
            "kill_signal": null,
            "labels": null,
            "links": null,
            "log_driver": null,
            "log_options": null,
            "mac_address": null,
            "memory": "0",
            "memory_reservation": null,
            "memory_swap": null,
            "memory_swappiness": null,
            "name": "hello",
            "network_mode": null,
            "networks": null,
            "oom_killer": null,
            "oom_score_adj": null,
            "paused": false,
            "pid_mode": null,
            "privileged": false,
            "published_ports": null,
            "pull": false,
            "purge_networks": false,
            "read_only": false,
            "recreate": false,
            "restart": false,
            "restart_policy": null,
            "restart_retries": null,
            "security_opts": null,
            "shm_size": null,
            "ssl_version": null,
            "state": "started",
            "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": "Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"
}
    to retry, use: --limit @/vagrant/service-playbooks/microservice-infrastructure-no-elastic.retry
affects_2.2 bug cloud docker module

Comentario más útil

docker-py es solo el nombre del proyecto. Instala un paquete de Python llamado docker. Entonces deberías ejecutar:

# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> print(docker.version)
1.10.6
>>>

La degradación de docker-compose no eliminará el paquete de docker del proyecto de docker que está instalado en su servidor de acuerdo con su salida pip.
Lo siguiente debería solucionar su problema:

pip uninstall docker
pip uninstall docker-py
pip uninstall docker-compose
pip install docker-compose==1.9.0

Todos 64 comentarios

@guenhter Parece que la tarea se está transfiriendo a 192.168.77.201 como usuario de "implementación". ¿Se recopiló la salida de la "lista de pip" en la descripción como ese usuario en ese host?

ssh [email protected] 'python -c "import docker-py"'

need_info

@guenhter
Esto se debe a su versión docker-compose.
El paquete docker-py ha cambiado de nombre a docker en la versión 2.0 (https://github.com/docker/docker-py/releases/tag/2.0.0). Y en esta versión, Docker.Client se ha renombrado a docker.APIClient.
Docker-compose 1.10+ ahora requiere docker en lugar de docker-py. Y debido a su nombre, el paquete docker está antes del docker-py en PYTHONPATH, lo que provoca el error de importación.
Una solución alternativa es degradar su versión de docker-compose a 1.9.0 en el momento en que el módulo docker_container de Ansible actualiza sus dependencias de docker-py a docker.

@jctanner
La salida de la lista de pips fue de ese host. Vea algunos comandos más a continuación:

ssh [email protected] 'python --version'
--> Python 2.7.9

ssh [email protected] 'python -c "import docker-py"'

--> File "<string>", line 1
    import docker-py
                 ^
SyntaxError: invalid syntax



ssh [email protected] 'pip list'
-->DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
chardet (2.3.0)
colorama (0.3.7)
defusedxml (0.4.1)
docker (2.0.2)
docker-compose (1.10.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
docutils (0.12)
enum34 (1.1.6)
functools32 (3.2.3.post2)
iotop (0.6)
ipaddress (1.0.18)
jsonschema (2.5.1)
Pillow (2.6.1)
pip (9.0.1)
Pygments (2.0.1)
python-apt (0.9.3.12)
python-debian (0.1.27)
python-debianbts (1.11)
PyYAML (3.12)
reportbug (6.6.3)
requests (2.11.1)
roman (2.0.0)
setuptools (5.5.1)
six (1.10.0)
SOAPpy (0.12.22)
texttable (0.8.7)
websocket-client (0.40.0)
wstools (0.4.3)

@jpiron
Traté de degradar docker-compse -> mismo error
Además, la desinstalación no ayudó.

docker-py es solo el nombre del proyecto. Instala un paquete de Python llamado docker. Entonces deberías ejecutar:

# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> print(docker.version)
1.10.6
>>>

La degradación de docker-compose no eliminará el paquete de docker del proyecto de docker que está instalado en su servidor de acuerdo con su salida pip.
Lo siguiente debería solucionar su problema:

pip uninstall docker
pip uninstall docker-py
pip uninstall docker-compose
pip install docker-compose==1.9.0

@jpiron
Esto funciona perfectamente bien. ¡Gracias!

Pero en mi opinión, esto es solo una solución para que las cosas sigan funcionando.
No obstante, debería solucionarse esto para evitar la degradación de docker-compose.

¿Alguna noticia sobre esto?

Recibo el mismo error al intentar usar docker_image. ¿Debo abrir un nuevo problema o es exactamente el mismo problema?


- name: Test docker install by pulling hello world image
      docker_image:
        name: hello-world

fatal: [devhost]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"}

pip list | grep docker

docker (2.0.2)
docker-compose (1.9.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)

No funcionará con docker y docker-py instalados. debe eliminar docker y reinstalar docker-py:

pip uninstall docker
pip install --ignore-installed docker-py

Esto debería resolver tu problema.

Esta confirmación e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 debería resolver el problema. Hasta que se publique, supongo que nos quedamos con docker-compose <= 1.9.0.

Tuvimos que eliminar docker-compose 1.10 (pip-version) y todas sus dependencias (principalmente módulo docker). Hicimos una diferencia entre un estado limpio y un estado "contaminado" (con docker-compose 1.10 en pip instalado): para revertir, hicimos:
for pipPackage in cached-property colorama docker docker-compose dockerpty docopt functools32 jsonschema texttable docker-py ; do sudo pip uninstall -y ${pipPackage} 2>&1 | logger -i -t TestRemove ; done
Luego instalamos docker-compose 1.10 con el método curl (ver documento oficial). No hay problema con el recurso docker_container. Hay un problema con docker_service, porque necesita docker-compose en python. Pero ya no usamos docker_service. Las dependencias de Pip son un infierno que queremos evitar a partir de ahora !! Esta es la mejor solución que tenemos por ahora.

Esta confirmación e2a1ce2 debería resolver el problema.

Este parche no está presente en Ansible 2.2.1.0 .

Probé esto hoy con tags/v2.2.2.0-0.2.rc2
pero todavía tengo el problema:

deploy<strong i="8">@machine1</strong>:/home/vagrant$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
chardet (2.3.0)
colorama (0.3.7)
defusedxml (0.4.1)
docker (2.1.0)
docker-compose (1.11.2)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
docutils (0.12)
enum34 (1.1.6)
functools32 (3.2.3.post2)
iotop (0.6)
ipaddress (1.0.18)
jsonschema (2.6.0)
Pillow (2.6.1)
pip (9.0.1)
Pygments (2.0.1)
python-apt (0.9.3.12)
python-debian (0.1.27)
python-debianbts (1.11)
PyYAML (3.12)
reportbug (6.6.3)
requests (2.13.0)
roman (2.0.0)
setuptools (5.5.1)
six (1.10.0)
SOAPpy (0.12.22)
texttable (0.8.7)
websocket-client (0.40.0)
wstools (0.4.3)

deploy<strong i="9">@machine1</strong>:/home/vagrant$ docker-compose
ERROR: Dependency conflict: an older version of the 'docker-py' package is polluting the namespace. Run the following command to remedy the issue:
pip uninstall docker docker-py; pip install docker

Por otro lado, cuando docker-py no está instalado ( pip uninstall docker-py ), ansible se queja:

Failed to import docker-py - No module named docker. Try `pip install docker-py`

@guenhter ,
Instalar Ansible 2.3.0 (desarrollo): pip install git+git://github.com/ansible/ansible.git@devel
Ahora incluye e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 que soluciona el problema de compatibilidad.

¿Cuándo estará disponible en una versión?

¿Alguna noticia sobre esto?

Como dijo @viossat , e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 está incluido en la versión 2.3.0.
Resuelve el problema incluso con los paquetes docker y los antiguos docker-py instalados. Puedes probarlo:

virtualenv -p /usr/bin/python2.7 /tmp/venv
source /tmp/venv/bin/activate
pip install https://github.com/ansible/ansible/archive/v2.3.0.0-0.1.rc1.zip
pip install docker docker-py
ansible localhost -m docker_container -a "name=foo image=busybox"

La compatibilidad con las nuevas bibliotecas de Docker se incluye en la versión de Ansible 2.3. Dado que esta es (IMO) una función para agregar nuevo soporte para docker-py v2, no creo que esto se ajuste a nuestra política de backport.

Funciona muy bien con ansible 2.3
Solo tenía que asegurarme de que docker-py ya no esté instalado pero que docker esté disponible (a través de pip).

¡Muchas gracias!

Como dice @guenhter . Funciona con Ansible 2.3 si elimina el antiguo módulo docker-py

- name: remove docker-py
  pip:
    name: docker-py
    state: absent

- name: Install docker python module
  pip:
    name: "docker-compose==1.12.0"

@martonsz Hola, tengo Ansible 2.3 pero

 - name: Test docker install by pulling hello world image
   docker_container:
     name: hello-world

no funciona para mi.

lista de pips:

backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
cffi (1.5.2)
chardet (2.3.0)
click (6.7)
colorama (0.3.7)
configobj (5.0.6)
Django (1.9.4)
django-debug-toolbar (1.4)
docker (2.2.1)
docker-compose (1.12.0)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
html5lib (0.999)
jsonschema (2.6.0)
misaka (2.0.0)
mycli (1.8.1)
mysqlclient (1.3.7)
okapi2 (0.0.1)
pip (8.1.1)
prompt-toolkit (1.0.13)
pycparser (2.14)
pycrypto (2.6.1)
Pygments (2.2.0)
pygobject (3.14.0)
PyMySQL (0.7.10)
python-apt (0.9.3.12)
PyYAML (3.12)
requests (2.11.1)
setuptools (5.5.1)
six (1.8.0)
sqlparse (0.2.1)
texttable (0.8.8)
unattended-upgrades (0.1)
urllib3 (1.9.1)
uWSGI (2.0.12)
virtualenv (15.0.1)
wcwidth (0.1.7)
websocket-client (0.40.0)

Error:

TASK [confluence : Test docker install by pulling hello world image] *************************************
fatal: [web1-vultr]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"}
        to retry, use: --limit @/home/martin/Work/ansible/site.retry

ansible --versión:

ansible 2.3.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609]

@Applemann Había instalado "docker-py" anteriormente, tenía que pip uninstall docker; pip install docker y luego empezó a funcionar ... no tengo idea de lo que pasó.

@matti Lo resolví agregando el parámetro -e 'ansible_python_interpreter=/usr/bin/python3' cuando ejecuto ansible-playbook.
Porque en el servidor se usa python3, pero en mi localhost estaba predeterminado python 2.7

Todavía tengo este problema con 2.3.0.0.

He documentado sobre Stack Overflow aquí: http://stackoverflow.com/a/43975079/1064619

Pasos para reproducir:

Creé un nuevo VirtualEnv:

zoidberg:foley chris$ virtualenv ansible-test
New python executable in /Users/chris/src/hc/foley/ansible-test/bin/python2.7
Also creating executable in /Users/chris/src/hc/foley/ansible-test/bin/python
Installing setuptools, pip, wheel...done.

Ansible instalado:

(ansible-test) zoidberg:foley chris$ pip install ansible
Collecting ansible
Collecting pycrypto>=2.6 (from ansible)
Collecting paramiko (from ansible)
  Using cached paramiko-2.1.2-py2.py3-none-any.whl
Collecting jinja2 (from ansible)
  Using cached Jinja2-2.9.6-py2.py3-none-any.whl
Requirement already satisfied: setuptools in ./ansible-test/lib/python2.7/site-packages (from ansible)
Collecting PyYAML (from ansible)
Collecting cryptography>=1.1 (from paramiko->ansible)
  Using cached cryptography-1.8.1-cp27-cp27m-macosx_10_10_intel.whl
Collecting pyasn1>=0.1.7 (from paramiko->ansible)
  Using cached pyasn1-0.2.3-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from jinja2->ansible)
Requirement already satisfied: six>=1.6.0 in ./ansible-test/lib/python2.7/site-packages (from setuptools->ansible)
Requirement already satisfied: packaging>=16.8 in ./ansible-test/lib/python2.7/site-packages (from setuptools->ansible)
Requirement already satisfied: appdirs>=1.4.0 in ./ansible-test/lib/python2.7/site-packages (from setuptools->ansible)
Collecting idna>=2.1 (from cryptography>=1.1->paramiko->ansible)
  Using cached idna-2.5-py2.py3-none-any.whl
Collecting enum34 (from cryptography>=1.1->paramiko->ansible)
  Using cached enum34-1.1.6-py2-none-any.whl
Collecting ipaddress (from cryptography>=1.1->paramiko->ansible)
  Using cached ipaddress-1.0.18-py2-none-any.whl
Collecting cffi>=1.4.1 (from cryptography>=1.1->paramiko->ansible)
  Using cached cffi-1.10.0-cp27-cp27m-macosx_10_6_intel.whl
Collecting asn1crypto>=0.21.0 (from cryptography>=1.1->paramiko->ansible)
  Using cached asn1crypto-0.22.0-py2.py3-none-any.whl
Requirement already satisfied: pyparsing in ./ansible-test/lib/python2.7/site-packages (from packaging>=16.8->setuptools->ansible)
Collecting pycparser (from cffi>=1.4.1->cryptography>=1.1->paramiko->ansible)
Installing collected packages: pycrypto, idna, enum34, ipaddress, pycparser, cffi, asn1crypto, cryptography, pyasn1, paramiko, MarkupSafe, jinja2, PyYAML, ansible
Successfully installed MarkupSafe-1.0 PyYAML-3.12 ansible-2.3.0.0 asn1crypto-0.22.0 cffi-1.10.0 cryptography-1.8.1 enum34-1.1.6 idna-2.5 ipaddress-1.0.18 jinja2-2.9.6 paramiko-2.1.2 pyasn1-0.2.3 pycparser-2.17 pycrypto-2.6.1

Comprobó la versión:

(ansible-test) zoidberg:foley chris$ ansible --version
ansible 2.3.0.0
  config file =
  configured module search path = Default w/o overrides
  python version = 2.7.13 (default, May 14 2017, 22:38:03) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)]

Docker y docker-py instalados:

(ansible-test) zoidberg:foley chris$ pip list | grep docker
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
docker (2.0.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)

Pero sigo recibiendo el mismo error:

(ansible-test) zoidberg:foley chris$ ansible-playbook -i inventory/local build.yml -vvvv
No config file found; using defaults
Loading callback plugin default of type stdout, v2.0 from /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/plugins/callback/__init__.pyc

PLAYBOOK: build.yml **********************************************************************************************************************************************************
1 plays in build.yml

PLAY [Build foley docker images] *********************************************************************************************************************************************
META: ran handlers

TASK [docker_image] **********************************************************************************************************************************************************
task path: /Users/chris/src/hc/foley/build.yml:12
Using module file /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/modules/cloud/docker/docker_image.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: chris
<localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889 `" && echo ansible-tmp-1494837576.9-236428678313889="` echo /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889 `" ) && sleep 0'
<localhost> PUT /var/folders/zn/cfj4ng250293z1g5s19w3zdh0000gn/T/tmp_SRwg6 TO /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/docker_image.py
<localhost> EXEC /bin/sh -c 'chmod u+x /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/ /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/docker_image.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/docker_image.py; rm -rf "/Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/" > /dev/null 2>&1 && sleep 0'
fatal: [127.0.0.1 -> localhost]: FAILED! => {
    "changed": false,
    "failed": true,
    "invocation": {
        "module_args": {
            "api_version": null,
            "archive_path": null,
            "buildargs": {
                "PRIVATE_REPO_PASSWORD": "6c50ef3a91e9b5cd47251f921f3fb53d1e53afa5",
                "PRIVATE_REPO_USERNAME": "hexagonalwax"
            },
            "cacert_path": null,
            "cert_path": null,
            "container_limits": null,
            "debug": false,
            "docker_host": null,
            "dockerfile": null,
            "filter_logger": false,
            "force": false,
            "http_timeout": null,
            "key_path": null,
            "load_path": null,
            "name": "honeycomb/foley",
            "nocache": "False",
            "path": ".",
            "pull": true,
            "push": false,
            "repository": null,
            "rm": true,
            "ssl_version": null,
            "state": "present",
            "tag": "latest",
            "timeout": null,
            "tls": null,
            "tls_hostname": null,
            "tls_verify": null,
            "use_tls": "no"
        }
    },
    "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"
}
  to retry, use: --limit @/Users/chris/src/hc/foley/build.retry

PLAY RECAP *******************************************************************************************************************************************************************
127.0.0.1                  : ok=0    changed=0    unreachable=0    failed=1

Aquí está mi libro de jugadas:

(ansible-test) zoidberg:foley chris$ cat build.yml
---
- name: Build foley docker images
  hosts: 127.0.0.1
  connection: local
  gather_facts: false

  vars_files:
    - "ansible/vars/build_secrets.yml"

  tasks:

    - docker_image:
         path: .
         name: worldofchris/foley
         buildargs:
           PRIVATE_REPO_USERNAME: "{{ PRIVATE_REPO_USERNAME }}"
           PRIVATE_REPO_PASSWORD: "{{ PRIVATE_REPO_PASSWORD }}"
      delegate_to: localhost

Y mi inventario:

(ansible-test) zoidberg:foley chris$ cat inventory/local
[localhost]
127.0.0.1 ansible_connection=local

¿Alguna idea de lo que estoy haciendo mal?

Gracias

@worldofchris docker-py es un módulo más antiguo, en ansible 2.3.0.0 intente instalar solo docker sin docker-py:

pip uninstall docker
pip uninstall docker-py
pip install docker

y ejecuta tu libro de jugadas.

Si uno instala ansible desde cero en un entorno centos limpio, ¿no se supone que Ansible traerá la versión correcta de docker py o siempre debemos ejecutar pip uninstall docker-py la primera vez?

@Applemann gracias por eso. Probé tu sugerencia pero obtuve el mismo resultado:

(ansible-test) zoidberg:foley chris$ pip uninstall docker
    Uninstalling docker-2.0.0:
    ...
      Successfully uninstalled docker-2.0.0
    (ansible-test) zoidberg:foley chris$ pip uninstall docker-py
    Uninstalling docker-py-1.10.6:
    ...
      Successfully uninstalled docker-py-1.10.6
    (ansible-test) zoidberg:foley chris$ pip list | grep docker
    DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
    docker-pycreds (0.2.1)
    (ansible-test) zoidberg:foley chris$ pip install docker
    Collecting docker
      Using cached docker-2.2.1-py2.py3-none-any.whl
    Requirement already satisfied: backports.ssl-match-hostname>=3.5; python_version < "3.5" in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: ipaddress>=1.0.16; python_version < "3.3" in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: docker-pycreds>=0.2.1 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: requests!=2.11.0,!=2.12.2,>=2.5.2 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: websocket-client>=0.32.0 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: six>=1.4.0 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Installing collected packages: docker
    Successfully installed docker-2.2.1
    (ansible-test) zoidberg:foley chris$ pip list | grep docker
    DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
    docker (2.2.1)
    docker-pycreds (0.2.1)
    (ansible-test) zoidberg:foley chris$ ansible-playbook -i inventory/local build.yml -vvvv
    No config file found; using defaults
    Loading callback plugin default of type stdout, v2.0 from /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/plugins/callback/__init__.pyc

    PLAYBOOK: build.yml **********************************************************************************************************************************************************
    1 plays in build.yml

    PLAY [Build foley docker images] *********************************************************************************************************************************************
    META: ran handlers

    TASK [docker_image] **********************************************************************************************************************************************************
    task path: /Users/chris/src/hc/foley/build.yml:12
    Using module file /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/modules/cloud/docker/docker_image.py
    <localhost> ESTABLISH LOCAL CONNECTION FOR USER: chris
    <localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
    <localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324 `" && echo ansible-tmp-1494842343.37-265680192802324="` echo /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324 `" ) && sleep 0'
    <localhost> PUT /var/folders/zn/cfj4ng250293z1g5s19w3zdh0000gn/T/tmph0iFSY TO /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/docker_image.py
    <localhost> EXEC /bin/sh -c 'chmod u+x /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/ /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/docker_image.py && sleep 0'
    <localhost> EXEC /bin/sh -c '/usr/bin/python /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/docker_image.py; rm -rf "/Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/" > /dev/null 2>&1 && sleep 0'
    fatal: [127.0.0.1 -> localhost]: FAILED! => {
        "changed": false,
        "failed": true,
        "invocation": {
            "module_args": {
                "api_version": null,
                "archive_path": null,
                "buildargs": {
                    "PRIVATE_REPO_PASSWORD": "6c50ef3a91e9b5cd47251f921f3fb53d1e53afa5",
                    "PRIVATE_REPO_USERNAME": "hexagonalwax"
                },
                "cacert_path": null,
                "cert_path": null,
                "container_limits": null,
                "debug": false,
                "docker_host": null,
                "dockerfile": null,
                "filter_logger": false,
                "force": false,
                "http_timeout": null,
                "key_path": null,
                "load_path": null,
                "name": "honeycomb/foley",
                "nocache": "False",
                "path": ".",
                "pull": true,
                "push": false,
                "repository": null,
                "rm": true,
                "ssl_version": null,
                "state": "present",
                "tag": "latest",
                "timeout": null,
                "tls": null,
                "tls_hostname": null,
                "tls_verify": null,
                "use_tls": "no"
            }
        },
        "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"
    }
      to retry, use: --limit @/Users/chris/src/hc/foley/build.retry

    PLAY RECAP *******************************************************************************************************************************************************************
    127.0.0.1                  : ok=0    changed=0    unreachable=0    failed=1

¿He seguido tus instrucciones correctamente?

Salud

Chris

@worldofchris también puede intentar ejecutarlo con el intérprete de python3 en lugar de python 2.7
Porque tuve el mismo problema aquí: https://github.com/ansible/ansible/issues/20492#issuecomment -293644891
Y lo resolví ejecutando el libro de jugadas en python3.

Gracias @Applemann lo cambió a Python 3 y funcionó. Necesitaba una razón para pasar a Python 3, así que esta es tan buena como cualquier otra.

¡Salud!

Gracias @Applemann, cambiar a python3 y señalar al intérprete de python en virtualenv también funcionó.

ansible-playbook docker-test.yml \
       -e 'ansible_python_interpreter=/data/python/envs/ansible/bin/python3'

Encontré este problema también con

''
Python 2.7.13
pip 9.0.1 de /usr/lib/python2.7/dist-packages (python 2.7)
ansible 2.3.0.0 (en la máquina local)

Cliente:
Versión: 1.12.6
Versión de API: 1.24
Go versión: go1.7.4
Confirmación de Git: 78d1802
Construido: Tue Mar 14 09:47:15 2017
SO / Arch: linux / amd64

Servidor:
Versión: 1.12.6
Versión de API: 1.24
Go versión: go1.7.4
Confirmación de Git: 78d1802
Construido: Tue Mar 14 09:47:15 2017
SO / Arch: linux / amd64
`` ``

Establecer python3 como ejecutable no resolvió esto por mí. Se las arregló para que funcionara haciendo un pip install docker docker-compose (sin docker-py presente) como se sugiere. Sin docker-compose vía pip, el módulo docker_container ansible funcionó, docker_service no.

Esto no tiene nada que ver con este problema. Ansible siempre requería docker-compose para el módulo docker_service.

Además, docker y docker-py no se pueden coinstalar en este momento, por lo que tener ambos instalados probablemente causará problemas.

Ahora está arreglado en 2.3.0. Solo necesita instalar el último docker-compose a través de pip en el control remoto, luego intente ejecutarlo y le dirá qué paquetes antiguos necesita eliminar.

¿Por qué este problema sigue abierto?

Sigo viendo este problema en Ansible 2.3.0:

$ ansible --version                                                        
ansible 2.3.0.0              
  config file = /vagrant/ansible/ansible.cfg       
  configured module search path = [u'./library']
  python version = 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4]      
$ pip freeze | grep docker                                                        
docker==2.3.0                                       
docker-compose==1.14.0
docker-pycreds==0.2.1
dockerpty==0.4.1  

Error del libro de jugadas con el módulo docker_container :

¡HA FALLADO! => {"cambiado": falso, "fallido": verdadero, "msg": "No se pudo importar docker-py - No hay módulo llamado docker. Pruebe pip install docker-py "

SO: Ubuntu 14.04.5 con 3.13.0-121-genérico x86_64 (caja vagabunda)
Versión de Python: 2.7.6

EDITAR: Esto se resuelve asegurándose de que la caja TARGET tenga estos módulos pip instalados, no solo la caja que ejecuta ansible:

- name: Ensure old module not present
  pip:
    name: docker-py
    state: absent
- name: Install pip modules on target box
  pip:
    name: "{{ item }}"
    state: present
  with_items:
    - docker
    - docker-compose

Todavía me sucede en ansible 2.3.1.0:

$ ansible --version
ansible 2.3.1.0
  config file = /home/reegnz/demo/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.5 (default, Aug  2 2016, 04:20:16) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]

Estoy preparando un virtualenv que solo contiene docker-compose, tira de docker como una dependencia transitiva.

$ virtualenv venv
$ source venv/bin/activate
(venv) $ pip install --upgrade pip
Downloading/unpacking pip from https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
  Downloading pip-9.0.1.tar.gz (1.2MB): 1.2MB downloaded
  Running setup.py egg_info for package pip
    /usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
      warnings.warn(msg)

    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.landscape.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    warning: no previously-included files found matching 'appveyor.yml'
    no previously-included directories found matching '.github'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
Installing collected packages: pip
  Found existing installation: pip 1.4.1
    Uninstalling pip:
      Successfully uninstalled pip
  Running setup.py install for pip
    /usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
      warnings.warn(msg)

    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.landscape.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    warning: no previously-included files found matching 'appveyor.yml'
    no previously-included directories found matching '.github'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
    Installing pip script to /home/reegnz/test/venv/bin
    Installing pip2.7 script to /home/test/venv/bin
    Installing pip2 script to /home/test/venv/bin
Successfully installed pip
Cleaning up...
(venv) $ pip install docker-compose
Collecting docker-compose
  Using cached docker_compose-1.14.0-py2.py3-none-any.whl
Collecting cached-property<2,>=1.2.0 (from docker-compose)
  Using cached cached_property-1.3.0-py2.py3-none-any.whl
Collecting backports.ssl-match-hostname>=3.5; python_version < "3.5" (from docker-compose)
Collecting ipaddress>=1.0.16; python_version < "3.3" (from docker-compose)
  Using cached ipaddress-1.0.18-py2-none-any.whl
Collecting jsonschema<3,>=2.5.1 (from docker-compose)
  Using cached jsonschema-2.6.0-py2.py3-none-any.whl
Collecting texttable<0.9,>=0.8.1 (from docker-compose)
Collecting six<2,>=1.3.0 (from docker-compose)
  Using cached six-1.10.0-py2.py3-none-any.whl
Collecting docker<3.0,>=2.3.0 (from docker-compose)
  Using cached docker-2.4.0-py2.py3-none-any.whl
Collecting enum34<2,>=1.0.4; python_version < "3.4" (from docker-compose)
  Using cached enum34-1.1.6-py2-none-any.whl
Collecting websocket-client<1.0,>=0.32.0 (from docker-compose)
  Using cached websocket_client-0.44.0-py2.py3-none-any.whl
Collecting PyYAML<4,>=3.10 (from docker-compose)
Collecting colorama<0.4,>=0.3.7 (from docker-compose)
  Using cached colorama-0.3.9-py2.py3-none-any.whl
Collecting requests!=2.11.0,<2.12,>=2.6.1 (from docker-compose)
  Using cached requests-2.11.1-py2.py3-none-any.whl
Collecting docopt<0.7,>=0.6.1 (from docker-compose)
Collecting dockerpty<0.5,>=0.4.1 (from docker-compose)
Collecting functools32; python_version == "2.7" (from jsonschema<3,>=2.5.1->docker-compose)
Collecting docker-pycreds>=0.2.1 (from docker<3.0,>=2.3.0->docker-compose)
  Using cached docker_pycreds-0.2.1-py2.py3-none-any.whl
Installing collected packages: cached-property, backports.ssl-match-hostname, ipaddress, functools32, jsonschema, texttable, six, websocket-client, docker-pycreds, requests, docker, enum34, PyYAML, colorama, docopt, dockerpty, docker-compose
Successfully installed PyYAML-3.12 backports.ssl-match-hostname-3.5.0.1 cached-property-1.3.0 colorama-0.3.9 docker-2.4.0 docker-compose-1.14.0 docker-pycreds-0.2.1 dockerpty-0.4.1 docopt-0.6.2 enum34-1.1.6 functools32-3.2.3.post2 ipaddress-1.0.18 jsonschema-2.6.0 requests-2.11.1 six-1.10.0 texttable-0.8.8 websocket-client-0.44.0

(venv) $ pip freeze > venv-requirements.txt

El archivo venv-requirements.txt tiene este aspecto:

( venv) $ cat venv-requirements.txt
backports.ssl-match-hostname==3.5.0.1
cached-property==1.3.0
colorama==0.3.9
docker==2.4.0
docker-compose==1.14.0
docker-pycreds==0.2.1
dockerpty==0.4.1
docopt==0.6.2
enum34==1.1.6
functools32==3.2.3.post2
ipaddress==1.0.18
jsonschema==2.6.0
PyYAML==3.12
requests==2.11.1
six==1.10.0
texttable==0.8.8
websocket-client==0.44.0

Instalo un virtualenv en mi máquina remota en / opt / ansible / venv con el archivo de requisitos pip anterior, y anulo ansible_python_interpreter con el siguiente script / opt / ansible / python-venv:

#!/bin/bash
source /opt/ansible/venv/bin/activate
python "$@"

Sigo recibiendo el siguiente error de ansible-playbook:

fatal: [localhost]: FAILED! => {
    "changed": false,
    "failed": true,
    "invocation": {
        "module_args": {
            "api_version": null,
            "build": false,
            "cacert_path": null,
            "cert_path": null,
            "debug": false,
            "definition": null,
            "dependencies": true,
            "docker_host": null,
            "files": null,
            "filter_logger": false,
            "hostname_check": false,
            "key_path": null,
            "nocache": false,
            "project_name": null,
            "project_src": "/opt/test",
            "pull": true,
            "recreate": "smart",
            "remove_images": null,
            "remove_orphans": false,
            "remove_volumes": false,
            "restarted": false,
            "scale": null,
            "services": null,
            "ssl_version": null,
            "state": "present",
            "stopped": false,
            "timeout": 10,
            "tls": null,
            "tls_hostname": null,
            "tls_verify": null
        }
    },
    "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"
}

También intenté instalar los paquetes docker-compose y docker-py sin éxito. Entonces sigo recibiendo el mismo mensaje de error.

Resulta que mi script de python-venv citado estaba mal y funciona.
Este era mi guión, no el que cité ...

#!/bin/bash
source /opt/ansible/bin/activate
python "$@"

Observe que falta 'venv' en el camino.

El mensaje de error no estaba del todo claro, por eso me tomó un tiempo depurarlo. Json no contiene el mensaje de error de Python.
Lo siento por los inconvenientes ocasionados.

ansible 2.3.0.0
versión de python = 2.7.13

lista de $ pip | grep docker
DEPRECACIÓN: el formato predeterminado cambiará a columnas en el futuro. Puede usar --format = (heredado | columnas) (o definir un formato = (heredado | columnas) en su pip.conf en la sección [lista]) para deshabilitar esta advertencia.
acoplador (2.4.2)
docker-compose (1.14.0)
docker-pycreds (0.2.1)
dockerpty (0.4.1)

Error: ¡FALLÓ! => {"cambiado": falso, "fallido": verdadero, "msg": "No se pudo importar docker-py - No hay módulo llamado docker. Prueba pip install docker-py "}

Sugiera una solución para esto. Todavía tengo que probarlo en virtualenv, mencionado en el comentario reegnz.

Para las personas perezosas para leer todas las publicaciones aquí:
Desde ansible 2.3, el problema de dependencia docker-py está solucionado:

  • si usa el python 2.7 predeterminado, el módulo docker necesita docker-py

  • si usa python 3 ( -e 'ansible_python_interpreter=/usr/bin/python3' ), necesita docker en lugar de docker-py
    en todo caso, limpiar por pip uninstall docker docker-py docker-compose
    reinstalar
    pip install docker-compose

python 3 no está en grandes distribuciones como CentOS / RHEL.

Agregaría , además de
-> módulos ansible como docker y docker-login requieren docker-py
-> docker-compose require docker (y no funciona si están instalados tanto docker como docker-py):

docker-compose
WARNING: Dependency conflict: an older version of the 'docker-py' package may be polluting the namespace. If you're experiencing crashes, run the following command to remedy the issue:
pip uninstall docker-py; pip uninstall docker; pip install docker

Entonces, es ansible trabajando o docker-compose. Está desordenado.
No tengo claro por qué se cierra este problema, ya que parece que ansible debería actualizar los módulos para que funcionen con docker en lugar de docker-py, incluso para 2.7, como lo hizo docker-compose.

Editar - funcionando - error de usuario: En mi caso, esto no fue un error. Para cualquier otra persona que experimente esto, intente ejecutar ansible con -vvvv. Vi que ansible estaba usando /usr/bin/python . Tuve que configurar ansible_python_interpreter en el ejecutable de Python en mi máquina host en el virtualenv donde pip estaba instalando cosas. Eso cambió el error a archivo no encontrado, lo que me hizo darme cuenta de que todo el error provenía de la máquina de destino. Así que cambié ansible_python_interpreter para que sea el ejecutable de Python de la máquina de destino, instalé docker-py en la máquina de destino y obtuve un error diferente sobre alguna otra dependencia relacionada (websockets o solicitudes o algo así) que no se está instalando. Luego desinstalé docker / docker-py en la máquina de destino e instalé docker-compose. Entonces todo funcionó.


Texto original - edición previa:

Solo una actualización con más información sobre un sistema defectuoso.

Mac 10.12.6
Versión de Docker 17.09.0-ce-mac35 (19611)
ansible 2.4.0.0
pip desinstalar docker docker-py docker-compose
pip install docker-compose

docker_image

FAILED! => {"changed": false, "failed": true, "msg": "Failed to import docker-py - No module named requests.exceptions. Try `pip install docker-py`"}
ansible localhost -m shell -a "python -c 'import requests.exceptions'"
localhost | SUCCESS | rc=0 >>

Tuve el problema de la muestra,
fatal: [localhost -> localhost]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named requests.exceptions. Try 'pip install docker-py'"}

Nada de lo mencionado en este hilo ayudó. Bajé ansible y todo funcionó.
pip install ansible==2.3.3.0

Los usuarios siguen encontrándose con este problema desde hace un año. ¿Por qué está cerrado este boleto?

Timo Soini

El mismo problema, "Controller" en Mac, "Managed-Host" en RPi, han estado luchando con esto durante 3 semanas. Registré mi propio problema, lo cerraron, entonces, ¿a dónde vamos desde aquí?

Esto es lo que abrí y lo cerré rápidamente. https://github.com/ansible/ansible/issues/34851

"Esto no es un problema con ansible, sino un problema potencial con docker-py / docker upstream: docker / docker-py # 1353

Pero tampoco hay respuesta en el enlace anterior.

Recibía el error y ejecutaba "pip install docker-py" lo solucionó, tal como decía el mensaje de error. Ansible 2.4.2.0.

¿Por qué está cerrado este problema? Instalamos el último ansible 2.4.2.0 en el último RedHat 7.4, que es una máquina limpia desde cero. Requiere docker-py y python3 no está instalado. Ansible RPM proporciona docker.py y NO docker-py. Es incompatible con Ansible instalar docker.py y usar docker-py.py.

Estoy enfrentando el problema en ansible==2.5.0 . Cualquier ayuda es muy apreciada.

Pruebe la resolución mencionada aquí https://github.com/ansible/ansible/issues/20492#issuecomment -361724244 - Ansible incluye un módulo docker, pero NO incluye el SDK del docker (necesario para comunicarse con el demonio del docker). Eso debe instalarse si desea utilizar el módulo.

@ryansb Puedo reproducir el problema con Ansible 2.5.0 en python3.

fatal: [db01]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named requests.exceptions. Try `pip install docker-py`"}

A pesar de:

$ pip3 freeze |grep docker
docker-py==1.10.6
docker-pycreds==0.2.2

La actualización a Ansible 2.4.3.0 no resuelve el problema.
Tengo la sospecha de que esto podría tener que ver con py2 vs py3, pero no tengo tiempo para reproducir en py2 en este momento.

FWIW Estoy viendo esto tanto en Ubuntu como en Fedora como nodo de control.

Comencé a instalar ansible con el administrador de paquetes nix para asegurarme de que siempre
tiene las dependencias correctas y no hay bibliotecas de Python adicionales en Python
camino. Estoy de acuerdo en que esto no es un problema ansible, es una biblioteca ascendente
problema, pero si el estado de su sistema impide que ansible funcione, nix
resuelve el problema de forma muy limpia.

El lunes 2 de abril de 2018 a las 18:31 David Moreau Simard [email protected]
escribió:

@ryansb https://github.com/ryansb Puedo reproducir el problema con
Ansible 2.5.0 en python3.

fatal: [db01]: ¡FALLÓ! => {"cambiado": falso, "msg": "No se pudo importar docker-py - No hay ningún módulo llamado solicitudes, excepciones. Prueba pip install docker-py "}

A pesar de:

$ pip3 congelar | grep docker
docker-py == 1.10.6
docker-pycreds == 0.2.2

La actualización a Ansible 2.4.3.0 no resuelve el problema.
Tengo la sospecha de que esto podría tener que ver con py2 vs py3 pero no
tenga tiempo para reproducir en py2 ahora mismo.

FWIW Estoy viendo esto tanto en Ubuntu como en Fedora como nodo de control.

-
Recibes esto porque estás suscrito a este hilo.
Responda a este correo electrónico directamente, véalo en GitHub
https://github.com/ansible/ansible/issues/20492#issuecomment-378067072 ,
o silenciar el hilo
https://github.com/notifications/unsubscribe-auth/AAnvxX5ctoUwDA-3VUVyTjh_k3vyMIa8ks5tkqbRgaJpZM4LpGqv
.

@ryansb Gracias por la ayuda. Pero, lamentablemente, no solucionó el problema.

nada

> nix-env -qa|grep sible
python2.7-ansible-2.1.4.0
python2.7-ansible-2.2.1.0
python2.7-ansible-2.3.2.0
python2.7-ansible-2.4.2.0
python2.7-ansible-lint-3.4.20
vimplugin-sensible-2018-01-22
> nix-env -i python2.7-ansible-2.4.2.0

Vuelva a abrir este problema.

@jpiron , ¿tiene un estado actualizado relacionado con esto?

Pasé por todas las soluciones de hilo, ninguna funcionó.

fatal: [172.16.101.44]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named 'docker'. Try `pip install docker-py`"}

Si ha instalado el módulo docker-py y aún tiene este problema, es porque no está utilizando el intérprete de Python correcto con Ansible. Si, por ejemplo, tiene Python 2 y 3 instalados e instala con pip3 install docker-py pero Ansible está usando Python 2, no verá el módulo tal como está instalado en el directorio de paquetes del sitio de Python3.

En este caso, deberá configurar ansible_python_interpreter en el host de su inventario. Consulte http://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html para obtener más información sobre ansible_python_interpreter .

Este no es un error de Ansible, es un problema en el entorno Python del sistema.

Hola @antoinetran , lo hice. De hecho, comencé con python3 y ahora bajé a python2. Todavía hay errores, pero ahora están relacionados con el paquete de solicitudes (instalarlo tampoco lo resuelve) ☹️

@lifenautjoe, esto parece ser un problema con su sistema. Si necesita ayuda, diríjase a Grupos de Google o al canal #ansible en Freenode para buscar el consejo de la comunidad. https://docs.ansible.com/ansible/latest/community/communication.html

tldr; realice las desinstalaciones / instalaciones anteriores en el host de destino .

Recibí este error usando los módulos ansible docker_service y docker_container. Intenté todo lo anterior pero ninguno funcionó. Pasé un tiempo vergonzosamente largo tratando de averiguar qué estaba pasando hasta que me di cuenta de que el error provenía de mi objetivo remoto ... Todo lo que tenía que hacer era seguir el comentario de @jpiron para instalar docker-compose 1.9.0 en el control remoto target en lugar de mi venv local donde existen mis libros de jugadas y todo funcionó.

Espero que esto resuelva algunos misterios.

Como otros, recibí el mismo error. No se pudo importar docker-py a través de una compilación de Terraform.

pip install --user --upgrade pip

estaba rompiendo cosas por mí. Aquí está mi entorno de trabajo:

Ubuntu 16.04
- python 2.7.12
- pip 8.1.1
- ansible 2.5.1
- docker 18.03.0-ce
- docker-compose 1.21.0

Espero que ayude.

Aún enfrenta problemas relacionados con este paquete en 2.5.3. Cuando se tiene docker-py instalado dentro de Python2.7, el módulo docker-container funciona muy bien, pero el docker-service no lo hace porque requiere que Docker compose esté instalado.

Al seguir las instrucciones de instalación proporcionadas por Ansible pip install docker-compose , también instala la versión Python 3 del paquete docker , que rompe el módulo docker-container . La eliminación manual de docker tampoco ayuda y aún falla con un mensaje _Failed to import docker-py_.

No está muy claro cómo continuar y tener ambos módulos funcionando al mismo tiempo.

En este punto, puede ser mejor abrir un nuevo problema, ya que este está cerrado y tal vez los desarrolladores de Ansible ya no lo vean.

¿Fue útil esta página
0 / 5 - 0 calificaciones