Centos7 docker-py似乎没有安装

时间:2015-05-20 13:18:05

标签: docker ansible centos7

我安装了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:我禁用了firewalld和SELinux

有什么想法吗? 感谢

4 个答案:

答案 0 :(得分:11)

我发现了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卸载docker-py来摆脱新版本。

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

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

答案 1 :(得分:6)

如果您正在使用CentOS7或类似产品,您可能不希望通过pip安装未打包的代码。在这种情况下,最好知道Extras频道有一个包python-docker-py。我遇到了这个问题,安装了这个包,并且参加了比赛。

答案 2 :(得分:2)

TL;博士;

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

上下文

我最近遇到了这个问题,但这是一个许可问题。

请注意,我使用了docker 1.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

问题

当sudoing时,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模块,可以使用ansible 2.1进行修复(参见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

答案 3 :(得分:0)

我最近遇到了这个问题的变体。不是由于我使用sudo安装模块,而是相反。

无论出于什么原因,我选择使用pip的docker标志安装--user,然后不幸地使用了-b--become选项的“想法”。

这导致运行我的剧本的提升的Ansible实例无法使用“显然”已安装的docker模块。共享以防万一某人有“那些日子中的某一天”,并在此后偶然发现。希望它能对您有所帮助,因为我为此支付了一些“愚蠢的税”,对我们俩都足够了。 :)