Centos7 docker-py好像没有安装

Centos7 docker-py doesn't seem to be installed

我安装了 Centos7 minimal 然后:ansible、docker、pip 并使用 pip 我安装了 docker-py。

版本:
- Docker 版本 1.6.0,构建 8aae715/1.6.0
-ansible 1.9.1
- docker_py-1.2.2

尝试运行剧本,例如

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

我收到消息:docker-py 似乎没有安装,但 Ansible Docker 模块需要。

我看不出问题所在。是CentOS,docker和ansible版本吗?

PS: 我禁用了防火墙和 SELinux

有什么想法吗? 谢谢

我发现 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。执行 pip uninstall docker-py 以删除较新的版本。

如果您不使用 ansible 来安装这些,请执行以下操作:

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

tl;博士;

检查文件权限并确保您的用户可以阅读 /usr/lib/python2.7/site-packages

中的 python 模块

上下文

我最近去了这个问题,但这是一个权限问题。

注意我用的是docker1.9.1、ansible 2.0.1.0和redhat 7.2。

我用 ansible 安装了 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

问题

当执行 sudo 时,ansible 可能会使用默认的 umask 0077 安装 docker-py。因此,除了 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

修复

通过将 umask=0022 参数传递给 pip 模块(请参阅 https://github.com/ansible/ansible-modules-core/commit/4b46200477216dbcc54611d1c3e6f0cc83757aaf),ansible 2.1 可以修复此问题。

现在我通过删除所有在模式 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

如果您使用的是 CentOS7 或类似系统,您可能不想通过 pip 安装未打包的代码。在这种情况下,最好知道 Extras 频道有一个包 python-docker-py。我遇到了这个问题,安装了那个包,然后开始比赛了。

我最近 运行 研究了这个问题的变体。这不是因为我使用 sudo 安装模块,而是相反。

出于某种原因,我选择使用 pip 的 --user 标志安装 docker,然后不幸 "idea" 使用 -b--become 选项.

这导致 "obviously" 安装的 docker 模块无法用于提升的 Ansible 实例 运行 我的剧本。共享以防有人 "one of those days" 并在以后偶然发现它。希望它对您有所帮助,因为我为这个提醒付出了很多 "stupid tax",希望对我们俩都足够。 :)