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 с повышенными правами, на котором запущена моя книга воспроизведения. Обмен в случае, если у кого-то есть "один из тех дней" и натыкается на это позже. Надеюсь, это поможет вам, так как я заплатил за это напоминание с хорошим "глупым налогом", надеюсь, для нас обоих. :)