Centos7 docker-py, похоже, не установлен

Я установил Centos7 минимальный, а затем: ansible, docker, pip и используя pip, я установил docker-py.

Версии:
- Докер версии 1.6.0, построить 8aae715/1.6.0
- невозможно 1.9.1
- docker_py-1.2.2

Пытаясь запустить playbook, например

- name: redis container
  docker:
    name: myredis
    image: redis
    state: started

i get msg: docker-py, похоже, не установлен, но необходим для модуля Ansible Docker.

Я не вижу проблемы. Это CentOS, докер и доступная версия?

PS: я отключил firewalld и SELinux

Любые идеи? Благодаря

Ответ 1

Я обнаружил пару проблем с модулем docker-py. После того, как я работал с ними, я закончил с этим:

  - name: Docker-PY
    pip:
      name: "{{ item }}"
    with_items:
    - six==1.4
    - docker-py==1.1.0

Во-первых, я столкнулся с вашей проблемой. Решение состоит в том, чтобы явно установить самую последнюю версию шести, как описано здесь: https://github.com/docker/docker-py/issues/344.

После этого я столкнулся с проблемой (вы тоже столкнетесь с ней) с ошибкой в ​​версии docker-py 1.2.2. Обходной путь - указать более старую версию, описанную здесь: https://github.com/ansible/ansible-modules-core/issues/1227. Удалите docker-py, чтобы избавиться от более новой версии.

Если вы не используете возможность установки, выполните следующие действия:

[sudo] pip uninstall docker-py
[sudo] pip install six==1.4
[sudo] pip install docker-py==1.1.0

Ответ 2

Если вы работаете с CentOS7 или похожим, вы можете не захотеть установить неупакованный код через pip. В этом случае хорошо знать, что канал Extras имеет пакет python-docker-py. У меня была эта проблема, я установил этот пакет и ушел на гонки.

Ответ 3

TL;DR;

проверить права доступа к файлам и убедиться, что ваш пользователь может прочитать модуль python в /usr/lib/python 2.7/site-packages

Контекст

Недавно я пришел к этому вопросу, но это была проблема разрешения.

Обратите внимание, что я использовал докер 1.9.1, ansible 2.0.1.0 и redhat 7.2.

Я установил docker-py с возможностью (это может и не быть вашим случаем).

Я сделал это с этой ролью:

- name: install docker-py with pip
  become: true
  pip: state=present name='{{ item }}'
  with_item:
    - docker-py==1.2.3
    - six==1.10.0

Проблема

При использовании sudoing, ansible может установить docker-py по умолчанию umask 0077. В результате ни один пользователь, кроме root, не сможет читать файлы модулей docker-py.

Ваша игра будет вызвана ошибкой docker-py doesn't seem to be installed, but is required for the Ansible Docker module.

Обратите внимание на различия между:

  • sudo pip install docker-py = > /usr/lib/python2.7/site-packages/docker находится в режиме 0700
  • sudo su, тогда pip install docker-py = > /usr/lib/python2.7/site-packages/docker находится в режиме 0755

Fix

Это будет исправлено с помощью ansible 2.1, передав параметр umask=0022 в модуль pip (см. https://github.com/ansible/ansible-modules-core/commit/4b46200477216dbcc54611d1c3e6f0cc83757aaf).

Теперь я исправил его, удалив все пакеты, установленные в режиме 0700:

pip uninstall -y six docker-py websocket_client

Затем переустановите их вручную:

sudo su
# now umask is 0022
pip install six==1.10.0 docker-py==1.2.3

Ответ 4

Я столкнулся с вариантом этой проблемы недавно. Это было не из-за того, что я использовал sudo для установки модуля, а наоборот.

По какой-то причине я решил установить docker используя флаг pip --user а затем имел неудачную "идею" использовать -b или --become.

Это привело к тому, что "очевидно" установленный модуль docker был недоступен для экземпляра Ansible с повышенными правами, на котором запущена моя книга воспроизведения. Обмен в случае, если у кого-то есть "один из тех дней" и натыкается на это позже. Надеюсь, это поможет вам, так как я заплатил за это напоминание с хорошим "глупым налогом", надеюсь, для нас обоих. :)