Ansible: Не удалось импортировать docker-py для модуля docker_container

Созданный на 20 янв. 2017  ·  64Комментарии  ·  Источник: ansible/ansible

ТИП ВЫПУСКА

  • Сообщение об ошибке
КОМПОНЕНТ НАЗВАНИЕ


docker_container

ДОСТУПНАЯ ВЕРСИЯ
- Вставьте дословный вывод из «ansible --version» между кавычками ниже
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)
КОНФИГУРАЦИЯ

Ничего не изменилось

ОС / СРЕДА


Linux machine1 3.16.0-4-amd64 # 1 SMP Debian 3.16.36-1 + deb8u1 (03.09.2016) x86_64 GNU / Linux

список пунктов:

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 --version
Python 2.7.9

информация о докере

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
РЕЗЮМЕ

Когда используется модуль docker_container , он каждый раз выходит из строя с

"Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"
ДЕЙСТВИЯ ПО ВОСПРОИЗВЕДЕНИЮ
- В случае ошибок покажите, как именно воспроизвести проблему, используя минимальный тестовый пример. Для новых функций покажите, как они будут использоваться.

  - docker_container:
      image: hello-world
      name: hello
- Вы также можете вставлять ссылки gist.github.com для больших файлов
ОЖИДАЕМЫЕ РЕЗУЛЬТАТЫ

Изображение выполнено.

ФАКТИЧЕСКИЕ РЕЗУЛЬТАТЫ
- Что на самом деле произошло? Если возможно, запустите с дополнительной детализацией (-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

Самый полезный комментарий

docker-py - это просто название проекта. Он устанавливает пакет python с именем docker. Итак, вам следует запустить:

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

Понижение версии docker-compose не удалит пакет докера из проекта докера, который установлен на вашем сервере в соответствии с выводом вашего пакета.
Следующее должно решить вашу проблему:

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

Все 64 Комментарий

@guenhter Похоже, что задача ssh'ing к 192.168.77.201 в качестве пользователя "развертывания". Был ли собран "список пунктов" в описании от имени этого пользователя на этом хосте?

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

need_info

@guenhter
Это связано с вашей версией для создания докеров.
Пакет docker-py был переименован в docker в версии 2.0 (https://github.com/docker/docker-py/releases/tag/2.0.0). И в этой версии Docker.Client был переименован в docker.APIClient.
Docker-compose 1.10+ теперь требует docker вместо docker-py. И из-за его имени пакет docker находится перед пакетом docker-py в PYTHONPATH, что приводит к ошибке импорта.
Обходной путь - понизить версию docker-compose до 1.9.0, когда модуль Ansible docker_container обновит свои зависимости с docker-py до docker.

@jctanner
Вывод списка пунктов был получен с этого хоста. См. Еще несколько команд ниже:

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
Я попытался понизить версию docker-compse -> та же ошибка
Также не помогло его удаление.

docker-py - это просто название проекта. Он устанавливает пакет python с именем docker. Итак, вам следует запустить:

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

Понижение версии docker-compose не удалит пакет докера из проекта докера, который установлен на вашем сервере в соответствии с выводом вашего пакета.
Следующее должно решить вашу проблему:

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

@jpiron
Это прекрасно работает. Благодаря!

Но ИМО, это просто обходной путь, чтобы все продолжало работать.
Тем не менее, следует это исправить, чтобы избежать понижения версии docker-compose.

Есть новости по этому поводу?

Я получаю ту же ошибку при попытке использовать docker_image. Стоит ли открывать новый выпуск или это точно такая же проблема?


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

Он не будет работать с установленным докером и докером-py. вам следует удалить докер и переустановить docker-py:

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

Это должно решить вашу проблему.

Эта фиксация e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 должна решить проблему. Пока он не будет выпущен, я думаю, мы будем придерживаться docker-compose <= 1.9.0.

Нам пришлось удалить docker-compose 1.10 (pip-version) и все его зависимости (в основном модуль docker). Мы сделали различие между чистым состоянием и "загрязненным" состоянием (с установленным docker-compose 1.10 в pip): чтобы вернуться, мы сделали:
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
Затем мы установили docker-compose 1.10 методом curl (см. Официальный документ). Нет проблем с ресурсом docker_container. Есть проблема с docker_service, потому что вместо этого ему нужно docker-compose в python. Но мы больше не используем docker_service. Зависимости Pip - это ад, которого мы хотим избежать с этого момента !! Это лучшее решение, которое у нас есть на данный момент.

Эта фиксация e2a1ce2 должна решить проблему.

Этого патча нет в Ansible 2.2.1.0 .

Я пробовал это сегодня с tags/v2.2.2.0-0.2.rc2
но все еще есть проблема:

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

С другой стороны, когда docker-py не установлен ( pip uninstall docker-py ), то ansible жалуется:

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

@guenhter ,
Установите Ansible 2.3.0 (devel): pip install git+git://github.com/ansible/ansible.git@devel
Теперь он включает e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046, который устраняет проблему совместимости.

Когда это будет доступно в релизе?

Есть новости по этому поводу?

Как сказал @viossat , e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 включен в версию 2.3.0.
Это решает проблему даже при установленных пакетах docker и старых docker-py . Вы можете попробовать:

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"

Поддержка новых библиотек докеров включена в выпуск Ansible 2.3. Поскольку это (IMO) функция для добавления новой поддержки docker-py v2, я не думаю, что это вписывается в нашу политику обратного порта.

Отлично работает с ansible 2.3
Мне просто нужно было убедиться, что docker-py больше не установлен, но docker доступен (через pip).

Большое спасибо!

Как говорит @guenhter . Он работает с Ansible 2.3, если вы удалите старый модуль 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 Привет, у меня есть Ansible 2.3, но

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

не работай на меня.

список пунктов:

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)

Ошибка:

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

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. Ранее я установил docker-py - мне пришлось pip uninstall docker; pip install docker а затем он начал работать ... понятия не имею, что произошло.

@matti Я решил это, добавив параметр -e 'ansible_python_interpreter=/usr/bin/python3' при запуске ansible-playbook.
Потому что на сервере используется python3, но на моем локальном хосте по умолчанию был python 2.7

У меня все еще проблема с 2.3.0.0.

Документировали переполнение стека здесь: http://stackoverflow.com/a/43975079/1064619

Действия по воспроизведению:

Я создал новый 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:

(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

Проверил версию:

(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)]

Установил докер и докер-ру:

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

Но я все равно получаю ту же ошибку:

(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

Вот моя инструкция:

(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

И мой инвентарь:

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

Есть идеи, что я делаю не так?

благодаря

@worldofchris docker-py - более старый модуль, в ansible 2.3.0.0 попробуйте установить только докер без docker-py:

pip uninstall docker
pip uninstall docker-py
pip install docker

и запустите свой playbook.

Если установить ansible с нуля в чистой среде centos, разве Ansible не должен предоставлять правильную версию docker py или нам всегда нужно запускать pip uninstall docker-py в первый раз?

@Applemann, спасибо за это. Пробовал ваше предложение, но получил тот же результат:

(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

Правильно ли я выполнил ваши инструкции?

Ура

Крис

@worldofchris, вы также можете попробовать запустить его с интерпретатором python3 вместо python 2.7
Потому что у меня была такая же проблема: https://github.com/ansible/ansible/issues/20492#issuecomment -293644891
И я решил это, запустив playbook под python3.

Спасибо, @Applemann переключил его на Python 3, и это сработало. Мне нужна была причина для перехода на Python 3, так что это не хуже других.

Ура!

Спасибо, @Applemann, переключившись на python3 и указав на интерпретатор python в virtualenv, тоже сработало.

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

Столкнулся с этой проблемой также с

`` ''
Python 2.7.13
pip 9.0.1 из /usr/lib/python2.7/dist-packages (python 2.7)
ansible 2.3.0.0 (на локальной машине)

Клиент:
Версия: 1.12.6
Версия API: 1.24
Версия Go: go1.7.4
Git commit: 78d1802
Построен: 14 мар, вт, 09:47:15 2017
ОС / Arch: Linux / amd64

Сервер:
Версия: 1.12.6
Версия API: 1.24
Версия Go: go1.7.4
Git commit: 78d1802
Построен: 14 мар, вт, 09:47:15 2017
ОС / Arch: Linux / amd64
`` ''

Установка python3 качестве исполняемого файла не решила эту проблему. Удалось заставить его работать, выполнив pip install docker docker-compose (нет docker-py ), как было предложено. Без docker-compose через pip модуль docker_container ansible работал, а docker_service нет.

Это не имеет отношения к данной проблеме. Ansible всегда требовал docker-compose для модуля docker_service.

Кроме того, docker и docker-py в настоящий момент не могут быть установлены вместе, поэтому их установка, вероятно, вызовет проблемы.

Теперь это исправлено в 2.3.0. Вам нужно просто установить последнюю версию docker-compose через pip на удаленном компьютере, затем попытаться запустить ее, и она сообщит вам, какие старые пакеты вам нужно удалить.

Почему этот вопрос все еще открыт?

Все еще наблюдаю эту проблему в 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  

Ошибка плейбука с модулем docker_container :

НЕ УДАЛОСЬ! => {"changed": false, "failed": true, "msg": "Не удалось импортировать docker-py - нет модуля с именем docker. Попробуйте pip install docker-py "

ОС: Ubuntu 14.04.5 с 3.13.0-121-generic x86_64 (vagrant box)
Версия Python: 2.7.6

РЕДАКТИРОВАТЬ: это решается путем обеспечения того, чтобы в поле TARGET были установлены эти модули pip, а не только в окне, в котором запущен 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

Все еще случается со мной на 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)]

Я готовлю virtualenv, содержащий только docker-compose, он втягивает docker как транзитивную зависимость.

$ 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

Файл venv-requirements.txt выглядит так:

( 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

Я устанавливаю virtualenv на моем удаленном компьютере в / opt / ansible / venv с указанным выше файлом требований pip и переопределяю ansible_python_interpreter следующим скриптом / opt / ansible / python-venv:

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

Я все еще получаю следующую ошибку из 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`"
}

Я также попытался установить пакеты docker-compose и docker-py, но безрезультатно. Тогда я все еще получаю то же сообщение об ошибке.

Оказывается, цитируемый мной скрипт python-venv был неправильным и работает.
Это был мой сценарий, а не тот, который я цитировал ...

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

Обратите внимание на отсутствие слова venv на пути.

Сообщение об ошибке было не совсем ясным, поэтому мне потребовалось время для отладки. Json не содержит сообщения об ошибке Python.
Приносим извинения за неудобства.

доступный 2.3.0.0
версия python = 2.7.13

список $ pip | grep docker
УСТАРЕНИЕ: формат по умолчанию изменится на столбцы в будущем. Вы можете использовать --format = (legacy | columns) (или определить format = (legacy | columns) в вашем pip.conf в разделе [list]), чтобы отключить это предупреждение.
докер (2.4.2)
докер-составить (1.14.0)
докеры-пикреды (0.2.1)
dockerpty (0.4.1)

Ошибка: НЕ ПРОШЛО! => {"changed": false, "failed": true, "msg": "Не удалось импортировать docker-py - модуль с именем docker отсутствует. Попробуйте pip install docker-py "}

Пожалуйста, предложите решение для этого. Я еще не пробовал это на virtualenv, упомянутом в комментарии reegnz.

Для людей, которым лень читать здесь каждый пост:
Начиная с версии 2.3, проблема с зависимостями docker-py исправлена:

  • если вы используете Python 2.7 по умолчанию, модулю docker требуется docker-py

  • если вы используете python 3 ( -e 'ansible_python_interpreter=/usr/bin/python3' ), ему нужен docker вместо docker-py
    в любом случае очистить pip uninstall docker docker-py docker-compose
    переустановить
    pip install docker-compose

Python 3 отсутствует в больших дистрибутивах, таких как CentOS / RHEL.

Я бы добавил, в дополнение к @antoinetran, что с python 2.7 нельзя использовать оба: ansible и docker-compose happy.
-> Доступные модули, такие как docker и docker-login, требуют docker-py
-> docker-compose require docker (и не работает, если установлены и docker, и 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

Так что это либо работает, либо docker-compose. Это грязно.
Я не понимаю, почему эта проблема закрыта, поскольку кажется, что необходимо обновить модули для работы с docker вместо docker-py, даже для 2.7, как это сделал docker-compose.

Правка - работа - ошибка пользователя: в моем случае это не было ошибкой. Для всех, кто сталкивается с этим, попробуйте запустить ansible с -vvvv. Я видел, что анзибл использовал /usr/bin/python . Мне пришлось установить ansible_python_interpreter в исполняемый файл python на моем хост-компьютере в virtualenv, где pip устанавливал вещи. Это изменило ошибку на файл, который не найден, что заставило меня понять, что вся ошибка исходит от целевой машины. Поэтому я переключил ansible_python_interpreter на исполняемый файл python на целевой машине, установил docker-py на целевой машине и получил другую ошибку, связанную с неустановленными зависимостями (веб-сокеты, запросы или что-то еще). Затем я удалил docker / docker-py на целевой машине и установил docker-compose. Потом все заработало.


Исходный текст - предварительное редактирование:

Просто обновление с дополнительной информацией о неисправной системе.

Mac 10.12.6
Докер версии 17.09.0-ce-mac35 (19611)
доступный 2.4.0.0
pip удалить 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 >>

У меня была проблема с образцом,
fatal: [localhost -> localhost]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named requests.exceptions. Try 'pip install docker-py'"}

Ничего из упомянутого в этой ветке не помогло. Я понизил ансибл, и все заработало.
pip install ansible==2.3.3.0

Пользователи продолжают сталкиваться с этой проблемой с года. Почему этот билет закрыт?

Тимо Сойни

Та же проблема, «Контроллер» на Mac, «Управляемый хост» на RPi, боролся с этим в течение 3 недель. Я зарегистрировал свою проблему, они ее закрыли, так что же нам дальше?

Вот что я открыл и тут же закрыл. https://github.com/ansible/ansible/issues/34851

"Это не проблема с ansible, это потенциальная проблема с upstream docker-py / docker: docker / docker-py # 1353

Но и по ссылке выше нет ответа.

Я получал ошибку, и запуск "pip install docker-py" исправил ее, как и было сказано в сообщении об ошибке. Ansible 2.4.2.0.

Почему этот вопрос закрыт? Мы установили последнюю версию ansible 2.4.2.0 в последнюю версию RedHat 7.4, то есть чистую машину с нуля. Требуется docker-py, а python3 не установлен. Ansible RPM предоставляет docker.py, а НЕ docker-py. Ansible несовместим с установкой docker.py и использованием docker-py.py.

Я столкнулся с проблемой в ansible==2.5.0 . Любая помощь высоко ценится.

Пожалуйста, попробуйте разрешение, упомянутое здесь https://github.com/ansible/ansible/issues/20492#issuecomment -361724244 - Ansible включает модуль докера, но НЕ включает docker SDK (необходимый для связи с демоном докера). Его необходимо установить, если вы хотите использовать модуль.

@ryansb Я могу воспроизвести проблему с Ansible 2.5.0 на python3.

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

Несмотря на:

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

Переход на Ansible 2.4.3.0 не решает проблему.
У меня есть подозрение, что это может быть связано с py2 vs py3, но у меня сейчас нет времени воспроизводить на py2.

FWIW Я вижу это как в Ubuntu, так и в Fedora в качестве управляющего узла.

Я начал устанавливать ansible с помощью диспетчера пакетов nix, чтобы он всегда
имеет правильные зависимости и никаких дополнительных библиотек python в python
путь. Я согласен, что это не проблема, это апстрим-библиотека
проблема, но если состояние вашей системы препятствует работе ansible, nix
решает проблему очень чисто.

В пн, 2 апреля 2018 г., 18:31 Дэвид Моро Симард [email protected]
написал:

@ryansb https://github.com/ryansb Я могу воспроизвести проблему с помощью
Ansible 2.5.0 на python3.

фатальный: [db01]: НЕ ВЫПОЛНЕНО! => {"changed": false, "msg": "Не удалось импортировать docker-py - нет модуля с именем requests.exceptions. Попробуйте pip install docker-py "}

Несмотря на:

$ pip3 freeze | grep docker
докер-py == 1.10.6
докер-pycreds == 0.2.2

Переход на Ansible 2.4.3.0 не решает проблему.
У меня есть подозрение, что это может быть связано с py2 vs py3, но я не
есть время воспроизвести на py2 прямо сейчас.

FWIW Я вижу это как в Ubuntu, так и в Fedora в качестве управляющего узла.

-
Вы получаете это, потому что подписаны на эту ветку.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/ansible/ansible/issues/20492#issuecomment-378067072 ,
или отключить поток
https://github.com/notifications/unsubscribe-auth/AAnvxX5ctoUwDA-3VUVyTjh_k3vyMIa8ks5tkqbRgaJpZM4LpGqv
.

@ryansb Спасибо за помощь. Но, к сожалению, это не помогло.

ничего

> 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

Пожалуйста, повторно откройте эту проблему.

@jpiron, у вас есть обновленный статус по этому

Перебрали все решения потока, ни одно не сработало.

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

@lifenautjoe пробовали ли вы https://github.com/ansible/ansible/issues/20492#issuecomment -307642085

Если вы установили модуль docker-py и по-прежнему имеете эту проблему, это связано с тем, что вы не используете правильный интерпретатор Python с Ansible. Если, например, у вас установлены и Python 2 и 3, и вы устанавливаете их с помощью pip3 install docker-py но Ansible использует Python 2, он не увидит модуль, установленный в каталоге пакетов сайта Python3.

В этом случае вам нужно будет установить ansible_python_interpreter на хосте в вашем инвентаре. См. Http://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html для получения дополнительной информации о ansible_python_interpreter .

Это не ошибка Ansible, это проблема системной среды Python.

Привет, @antoinetran , я сделал. На самом деле я начал с python3, а сейчас перешел на python2. По-прежнему ошибки, но теперь они связаны с пакетом запросов (установка тоже не решает) ☹️

@lifenautjoe, похоже, проблема в вашей системе. Если вам нужна помощь, зайдите в Группы Google или на канал #ansible на Freenode, чтобы получить совет от сообщества. https://docs.ansible.com/ansible/latest/community/communication.html

tldr; выполните указанные выше un / installation на целевом хосте .

Я столкнулся с этой ошибкой, используя доступные модули docker_service и docker_container. Я пробовал все, что описано выше, но ничего не помогло. Я провел досадно долгое время, пытаясь понять, что происходит, пока не понял, что ошибка исходит от моей удаленной цели ... Все, что мне нужно было сделать, это следовать комментарию @jpiron, чтобы установить docker-compose 1.9.0 на удаленном target вместо моего местного venv, где мои playbooks существуют, и все работает.

Надеюсь, это решит некоторые загадки.

Как и другие, я получал ту же ошибку. Не удалось импортировать docker-py через сборку Terraform.

pip install --user --upgrade pip

ломал вещи для меня. Вот моя рабочая среда:

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

Надеюсь, это поможет.

По-прежнему возникают проблемы с этим пакетом в 2.5.3. Когда docker-py установлен в Python2.7, модуль docker-container работает отлично, но docker-service - нет, потому что для него требуется установка Docker compose.

Следуя инструкциям по установке, предоставленным Ansible pip install docker-compose , он также устанавливает версию Python 3 пакета docker , которая нарушает работу модуля docker-container . Удаление docker вручную тоже не помогает и по-прежнему не удается с сообщением _Failed to import docker-py_.

Очень непонятно, как продолжить работу и заставить оба модуля работать одновременно.

На этом этапе может быть лучше открыть новую проблему, поскольку она закрыта и, возможно, разработчики Ansible больше не обращают на нее внимания.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги