我安装了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
有什么想法吗? 感谢
答案 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)
检查文件权限并确保您的用户可以阅读/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
模块。共享以防万一某人有“那些日子中的某一天”,并在此后偶然发现。希望它能对您有所帮助,因为我为此支付了一些“愚蠢的税”,对我们俩都足够了。 :)