ansible returns 与“无法导入所需的 Python 库(Docker SDK for Python:docker(Python >= 2.7)或 docker-py (Python 2.6))
ansible returns with "Failed to import the required Python library (Docker SDK for Python: docker (Python >= 2.7) or docker-py (Python 2.6))
我在运行宁我的服务器在ubuntu:
+ sudo cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
我使用 ansible,当我 运行 它时,我收到以下错误:
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to import the required Python library (Docker SDK for Python: docker (Python >= 2.7) or docker-py (Python 2.6)) on dd63315fad06's Python /usr/bin/python. Please read module documentation and install in the appropriate location, for example via `pip install docker` or `pip install docker-py` (Python 2.6). The error was: No module named docker"}
当我运行
python -c "import sys; print(sys.path)"
我明白了:
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/pip-19.2.2-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/fasteners-0.15-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/monotonic-1.5-py2.7.egg', '/usr/lib/python2.7/dist-packages']
和python版本如下:
+ python --version
Python 2.7.12
+ python3 --version
Python 3.5.2
然后我看到一切都很好,我不确定为什么我得到
"Failed to import the required Python library (Docker SDK for Python: docker (Python >= 2.7) or docker-py (Python 2.6)) on dd63315fad06's Python /usr/bin/python. Please read module documentation and install in the appropriate location, for example via `pip install docker` or `pip install docker-py` (Python 2.6). The error was: No module named docker"
在 ansible 中?
您似乎没有安装 docker
模块。
您需要通过系统包管理器(例如apt install python-docker
)或使用pip
(pip install docker
)安装它。
如果您有多个 Python 版本,请确保您已将 docker
模块安装到 Ansible 使用的版本中。
在我的例子中(Ubuntu 20 已安装 docker)这些命令是必需的
apt update
apt install python3 python3-pip
pip3 install docker docker-compose
详细要求:
https://docs.ansible.com/ansible/latest/collections/community/general/docker_compose_module.html
我在 Ansible docker-compose 模块中遇到了同样的问题。我能够通过为这些任务选择 python3 来修复它。
之前(不工作)
- name: Create docker service services
docker_compose:
project_src: /root/
become: true
(工作)之后
我们可以通过 $which python3
得到 python 位置
- name: Create fleuntd services
docker_compose:
project_src: /root/
become: true
vars:
ansible_python_interpreter: /bin/python3
随着 Docker SDK For Python 5.0 版的发布,我在 2021 年 4 月开始遇到同样的错误。错误消息几乎与原始问题完全相同,唯一的区别是错误消息末尾的语句之一:
The error was: No module named parse
或
The error was: No module named selectors
这最终是由于 Ansible 使用的 pip
旧版本,错误地在 Python2.7 设置上安装了 Python3 库。解决方法是将 docker
Python 库的版本固定到 5.0 版之前的版本,并将 'websocket-client' 库的版本固定到 1.0 版之前的版本:
- name: Install Docker SDK for Python
pip:
name: "docker<5"
become: yes
- name: Setup more docker dependencies
pip:
name: "websocket-client<1"
become: yes
或者,如果 Python2 仍在使用中,这组命令也可以工作:
pip install docker<5
pip install websocket-client<1
一旦安装了用于 Python 的 Docker SDK 和 Websocket 客户端的这些旧版本,Ansible 就能够代表我再次成功管理 Docker。
在这里,2021 年 5 月 Ubuntu 20.04 您需要 运行 apt install python3-docker
,因为默认情况下不再发货 python 2.x
我在运行宁我的服务器在ubuntu:
+ sudo cat /etc/os-release
NAME="Ubuntu"
VERSION="16.04.6 LTS (Xenial Xerus)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 16.04.6 LTS"
VERSION_ID="16.04"
HOME_URL="http://www.ubuntu.com/"
SUPPORT_URL="http://help.ubuntu.com/"
BUG_REPORT_URL="http://bugs.launchpad.net/ubuntu/"
VERSION_CODENAME=xenial
UBUNTU_CODENAME=xenial
我使用 ansible,当我 运行 它时,我收到以下错误:
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to import the required Python library (Docker SDK for Python: docker (Python >= 2.7) or docker-py (Python 2.6)) on dd63315fad06's Python /usr/bin/python. Please read module documentation and install in the appropriate location, for example via `pip install docker` or `pip install docker-py` (Python 2.6). The error was: No module named docker"}
当我运行
python -c "import sys; print(sys.path)"
我明白了:
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/pip-19.2.2-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/fasteners-0.15-py2.7.egg', '/usr/local/lib/python2.7/dist-packages/monotonic-1.5-py2.7.egg', '/usr/lib/python2.7/dist-packages']
和python版本如下:
+ python --version
Python 2.7.12
+ python3 --version
Python 3.5.2
然后我看到一切都很好,我不确定为什么我得到
"Failed to import the required Python library (Docker SDK for Python: docker (Python >= 2.7) or docker-py (Python 2.6)) on dd63315fad06's Python /usr/bin/python. Please read module documentation and install in the appropriate location, for example via `pip install docker` or `pip install docker-py` (Python 2.6). The error was: No module named docker"
在 ansible 中?
您似乎没有安装 docker
模块。
您需要通过系统包管理器(例如apt install python-docker
)或使用pip
(pip install docker
)安装它。
如果您有多个 Python 版本,请确保您已将 docker
模块安装到 Ansible 使用的版本中。
在我的例子中(Ubuntu 20 已安装 docker)这些命令是必需的
apt update
apt install python3 python3-pip
pip3 install docker docker-compose
详细要求:
https://docs.ansible.com/ansible/latest/collections/community/general/docker_compose_module.html
我在 Ansible docker-compose 模块中遇到了同样的问题。我能够通过为这些任务选择 python3 来修复它。
之前(不工作)
- name: Create docker service services
docker_compose:
project_src: /root/
become: true
(工作)之后
我们可以通过 $which python3
得到 python 位置- name: Create fleuntd services
docker_compose:
project_src: /root/
become: true
vars:
ansible_python_interpreter: /bin/python3
随着 Docker SDK For Python 5.0 版的发布,我在 2021 年 4 月开始遇到同样的错误。错误消息几乎与原始问题完全相同,唯一的区别是错误消息末尾的语句之一:
The error was: No module named parse
或
The error was: No module named selectors
这最终是由于 Ansible 使用的 pip
旧版本,错误地在 Python2.7 设置上安装了 Python3 库。解决方法是将 docker
Python 库的版本固定到 5.0 版之前的版本,并将 'websocket-client' 库的版本固定到 1.0 版之前的版本:
- name: Install Docker SDK for Python
pip:
name: "docker<5"
become: yes
- name: Setup more docker dependencies
pip:
name: "websocket-client<1"
become: yes
或者,如果 Python2 仍在使用中,这组命令也可以工作:
pip install docker<5
pip install websocket-client<1
一旦安装了用于 Python 的 Docker SDK 和 Websocket 客户端的这些旧版本,Ansible 就能够代表我再次成功管理 Docker。
在这里,2021 年 5 月 Ubuntu 20.04 您需要 运行 apt install python3-docker
,因为默认情况下不再发货 python 2.x