vol*_*vox 11 python pip ansible docker
我检查了这篇文章,并在两个答案中都遵循了修复,但都没有奏效.我打开一个新的职位的部分,因为这部分是因为我得到,即使这个问题可能是同一个稍微不同的错误.
Ansible主持人:
$ ansible --version
ansible 2.1.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
Run Code Online (Sandbox Code Playgroud)
目标客户端myserver:
$ pip list | egrep 'six|docker|websocket_client'
docker-py (1.2.3)
six (1.10.0)
Run Code Online (Sandbox Code Playgroud)
test.yml:
---
- hosts: myserver
remote_user: root
tasks:
- name: stop any running docker registries
docker_container:
name: registry
state: stopped
...
Run Code Online (Sandbox Code Playgroud)
Ansible服务器(ansible-playbook别名为ap):
$ ap -vvvv test.yml
输出:
(可能是无关的输出,剪断):
fatal: [myserver]: FAILED! => {
"changed": false,
"failed": true,
"invocation": {
"module_args": {
"api_version": null,
"blkio_weight": null,
"cacert_path": null,
"capabilities": null,
"cert_path": null,
"command": null,
"cpu_period": null,
"cpu_quota": null,
"cpu_shares": null,
"cpuset_cpus": null,
"cpuset_mems": null,
"debug": false,
"detach": true,
"devices": null,
"dns_opts": null,
"dns_search_domains": null,
"dns_servers": null,
"docker_host": null,
"entrypoint": null,
"env": null,
"etc_hosts": null,
"exposed_ports": null,
"filter_logger": false,
"force_kill": false,
"groups": null,
"hostname": null,
"image": null,
"interactive": false,
"ipc_mode": null,
"keep_volumes": true,
"kernel_memory": null,
"key_path": null,
"kill_signal": null,
"labels": null,
"links": null,
"log_driver":
"json-file",
"log_options": null,
"mac_address": null,
"memory": "0",
"memory_reservation": null,
"memory_swap": null,
"memory_swappiness": null,
"name": "registry",
"network_mode": null,
"networks": null,
"oom_killer": null,
"paused": false,
"pid_mode": null,
"privileged": false,
"published_ports": null,
"pull": false,
"read_only": false,
"recreate": false,
"restart": false,
"restart_policy": null,
"restart_retries": 0,
"security_opts": null,
"shm_size": null,
"ssl_version": null,
"state": "stopped",
"stop_signal": null,
"stop_timeout": null,
"timeout": null,
"tls": null,
"tls_hostname": null,
"tls_verify": null,
"trust_image_content": false,
"tty": false,
"ulimits": null,
"user": null,
"uts": null,
"volume_driver": null,
"volumes": null,
"volumes_from": null
},
"module_name": "docker_container"
},
"msg":
Run Code Online (Sandbox Code Playgroud)
(相关错误):
"Failed to import docker-py - cannot import name NotFound. Try pip install docker-py"}
当我根据引用帖子中的第一个答案将docker-py模块降级到1.1.0时,我得到了同样的错误.我也尝试chmod目录,它没有区别:
(/usr/lib/python2.7/site-packages) myserver$ ls -lad docker*
drwxr-xr-x. 6 root root 4096 Jul 4 10:57 docker/
drwxr-xr-x. 2 root root 4096 Jul 4 10:57 docker_py-1.2.3-py2.7.egg-info/
Run Code Online (Sandbox Code Playgroud)
来自chmod -R go+rx docker*.
谁看过这个吗?我已经尝试使用pip ansible模块安装模块,然后在手动删除它们之后,手动重新安装它们,如引用的帖子中所示.我也在使用2.1.0.0.正如你所看到的,应该解决这个问题.
长话短说
不要使用--userpip 标志来安装docker模块,然后使用-b或--become标志,ansible-playbook因为提升的 playbook 实例不会看到docker为其他用户安装的模块。
事后看来,对于其他人来说,为什么我遇到问题可能是显而易见的,但无论出于何种原因,我选择docker使用 pip 的--user标志进行安装,然后不幸的“想法”使用-bor--become选项。
这导致“显然”安装的docker模块对于运行我的 playbook 的提升的 Ansible 实例不可用。分享以防有人有“那些日子”并稍后偶然发现这一点。希望它对您有所帮助,因为我为这个提醒支付了一大笔“愚蠢的税”,希望对我们俩来说足够了。:)
这是因为新版本的python模块docker及其docker-py可兼容的用法不兼容。我必须还原并明确指定以下版本的PIP软件包:
这些的样本游戏任务:
- name: install certain python modules for docker
pip:
name: "{{ item.name }}"
version: "{{ item.version }}"
state: present
with_items:
- { name: docker, version: 2.0.0 }
- { name: docker-py, version: 1.10.6 }
Run Code Online (Sandbox Code Playgroud)
从那时起,我所有的剧本都运转良好。
对我来说,指定docker-py工作路径。
- hosts: <host>
environment:
PYTHONPATH: "/home/path/.local/lib/python2.7/site-packages"
Run Code Online (Sandbox Code Playgroud)
基本上 Ansible 正在寻找错误的目录。
感谢 Clay Graham 在这个问题上的精彩文章:
https://medium.com/dronzebot/ansible-and-docker-py-path-issues-and-resolving-them-e3834d5bb79a
| 归档时间: |
|
| 查看次数: |
14830 次 |
| 最近记录: |