Ansible: Gagal mengimpor modul docker-py untuk modul docker_container

Dibuat pada 20 Jan 2017  ·  64Komentar  ·  Sumber: ansible/ansible

JENIS MASALAH

  • Laporan Bug
NAMA KOMPONEN


docker_container

VERSI ANSIBLE
- Tempelkan keluaran kata demi kata dari "ansible --version" di antara tanda kutip di bawah
ansible 2.3.0 (devel 216e2c8813) last updated 2017/01/20 09:22:29 (GMT +000)
ansible 2.2.0.0 (detached HEAD cdec853e37) last updated 2017/01/20 09:25:31 (GMT +000)
KONFIGURASI

Tidak ada yang berubah

OS / LINGKUNGAN


Mesin Linux1 3.16.0-4-amd64 # 1 SMP Debian 3.16.36-1 + deb8u1 (2016-09-03) x86_64 GNU / Linux

daftar pip:

pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
chardet (2.3.0)
colorama (0.3.7)
defusedxml (0.4.1)
docker (2.0.2)
docker-compose (1.10.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
docutils (0.12)
enum34 (1.1.6)
functools32 (3.2.3.post2)
iotop (0.6)
ipaddress (1.0.18)
jsonschema (2.5.1)
Pillow (2.6.1)
pip (9.0.1)
Pygments (2.0.1)
python-apt (0.9.3.12)
python-debian (0.1.27)
python-debianbts (1.11)
PyYAML (3.12)
reportbug (6.6.3)
requests (2.11.1)
roman (2.0.0)
setuptools (5.5.1)
six (1.10.0)
SOAPpy (0.12.22)
texttable (0.8.7)
websocket-client (0.40.0)
wstools (0.4.3)

python --version
Python 2.7.9

info buruh pelabuhan

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.12.3
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 0
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge null overlay host
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options:
Kernel Version: 3.16.0-4-amd64
Operating System: Debian GNU/Linux 8 (jessie)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.963 GiB
Name: machine1
ID: PD6F:VQDI:VAK4:O3YU:PWDT:HFAG:T3Z4:FNP5:QLT7:C3TO:7OKS:OODH
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
WARNING: No memory limit support
WARNING: No swap limit support
WARNING: No kernel memory limit support
WARNING: No oom kill disable support
WARNING: No cpu cfs quota support
WARNING: No cpu cfs period support
Insecure Registries:
 127.0.0.0/8
RINGKASAN

Ketika modul docker_container digunakan, itu gagal setiap kali

"Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"
LANGKAH UNTUK REPRODUKSI
- Untuk bug, tunjukkan dengan tepat cara mereproduksi masalah, menggunakan kasus uji minimal. Untuk fitur baru, tunjukkan bagaimana fitur tersebut akan digunakan.

  - docker_container:
      image: hello-world
      name: hello
- Anda juga dapat menempelkan tautan gist.github.com untuk file yang lebih besar
HASIL YANG DIHARAPKAN

Gambar dieksekusi.

HASIL NYATA
- Apa yang sebenarnya terjadi? Jika memungkinkan, jalankan dengan verbositas ekstra (-vvvv)

TASK [docker-registry : docker_container] **************************************
task path: /vagrant/service-playbooks/roles/docker-registry/tasks/registry-server.yml:56
Using module file /home/vagrant/ansible/lib/ansible/modules/core/cloud/docker/docker_container.py
<192.168.77.201> ESTABLISH SSH CONNECTION FOR USER: deploy
<192.168.77.201> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.77.201 '/bin/sh -c '"'"'( umask 77 && mkdir -p "` echo $HOME/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817 `" && echo ansible-tmp-1484904632.51-163570270155817="` echo $HOME/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817 `" ) && sleep 0'"'"''
<192.168.77.201> PUT /tmp/tmpeXfDvf TO /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/docker_container.py
<192.168.77.201> SSH: EXEC sftp -b - -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r '[192.168.77.201]'
<192.168.77.201> ESTABLISH SSH CONNECTION FOR USER: deploy
<192.168.77.201> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r 192.168.77.201 '/bin/sh -c '"'"'chmod u+x /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/ /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/docker_container.py && sleep 0'"'"''
<192.168.77.201> ESTABLISH SSH CONNECTION FOR USER: deploy
<192.168.77.201> SSH: EXEC ssh -vvv -C -o ControlMaster=auto -o ControlPersist=60s -o KbdInteractiveAuthentication=no -o PreferredAuthentications=gssapi-with-mic,gssapi-keyex,hostbased,publickey -o PasswordAuthentication=no -o User=deploy -o ConnectTimeout=10 -o ControlPath=/home/vagrant/.ansible/cp/ansible-ssh-%h-%p-%r -tt 192.168.77.201 '/bin/sh -c '"'"'/usr/bin/python /home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/docker_container.py; rm -rf "/home/deploy/.ansible/tmp/ansible-tmp-1484904632.51-163570270155817/" > /dev/null 2>&1 && sleep 0'"'"''
fatal: [machine_1]: FAILED! => {
    "changed": false,
    "failed": true,
    "invocation": {
        "module_args": {
            "api_version": null,
            "blkio_weight": null,
            "cacert_path": null,
            "capabilities": null,
            "cert_path": null,
            "cleanup": false,
            "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,
            "env_file": null,
            "etc_hosts": null,
            "exposed_ports": null,
            "filter_logger": false,
            "force_kill": false,
            "groups": null,
            "hostname": null,
            "ignore_image": false,
            "image": "hello-world",
            "interactive": false,
            "ipc_mode": null,
            "keep_volumes": true,
            "kernel_memory": null,
            "key_path": null,
            "kill_signal": null,
            "labels": null,
            "links": null,
            "log_driver": null,
            "log_options": null,
            "mac_address": null,
            "memory": "0",
            "memory_reservation": null,
            "memory_swap": null,
            "memory_swappiness": null,
            "name": "hello",
            "network_mode": null,
            "networks": null,
            "oom_killer": null,
            "oom_score_adj": null,
            "paused": false,
            "pid_mode": null,
            "privileged": false,
            "published_ports": null,
            "pull": false,
            "purge_networks": false,
            "read_only": false,
            "recreate": false,
            "restart": false,
            "restart_policy": null,
            "restart_retries": null,
            "security_opts": null,
            "shm_size": null,
            "ssl_version": null,
            "state": "started",
            "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": "Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"
}
    to retry, use: --limit @/vagrant/service-playbooks/microservice-infrastructure-no-elastic.retry
affects_2.2 bug cloud docker module

Komentar yang paling membantu

docker-py hanyalah nama proyek. Ini menginstal paket python bernama buruh pelabuhan. Jadi, Anda harus menjalankan:

# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> print(docker.version)
1.10.6
>>>

Mendowngrade docker-compose tidak akan menghapus paket buruh pelabuhan dari proyek buruh pelabuhan yang diinstal di server Anda sesuai dengan keluaran pip Anda.
Hal berikut ini akan memperbaiki masalah Anda:

pip uninstall docker
pip uninstall docker-py
pip uninstall docker-compose
pip install docker-compose==1.9.0

Semua 64 komentar

@guenhter Tampaknya tugas tersebut ssh'ing ke 192.168.77.201 sebagai pengguna "deploy". Apakah output "daftar pip" dalam deskripsi dikumpulkan sebagai pengguna di host tersebut?

ssh [email protected] 'python -c "import docker-py"'

need_info

@guenhter
Ini karena versi penulisan buruh pelabuhan Anda.
Paket buruh pelabuhan-py telah diubah namanya menjadi buruh pelabuhan di versi 2.0 (https://github.com/docker/docker-py/releases/tag/2.0.0). Dan pada versi ini, Docker.Client telah diubah namanya menjadi docker.APIClient.
Docker-compose 1.10+ sekarang membutuhkan docker, bukan docker-py. Dan karena namanya paket buruh pelabuhan sebelum buruh pelabuhan-py satu di PYTHONPATH yang menyebabkan kesalahan impor.
Solusinya adalah dengan menurunkan versi docker-compose Anda ke 1.9.0 saat modul Ansible docker_container memperbarui dependensinya dari docker-py ke docker.

@bayu_joo
Output daftar pip berasal dari host itu. Lihat beberapa perintah lagi di bawah ini:

ssh [email protected] 'python --version'
--> Python 2.7.9

ssh [email protected] 'python -c "import docker-py"'

--> File "<string>", line 1
    import docker-py
                 ^
SyntaxError: invalid syntax



ssh [email protected] 'pip list'
-->DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
chardet (2.3.0)
colorama (0.3.7)
defusedxml (0.4.1)
docker (2.0.2)
docker-compose (1.10.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
docutils (0.12)
enum34 (1.1.6)
functools32 (3.2.3.post2)
iotop (0.6)
ipaddress (1.0.18)
jsonschema (2.5.1)
Pillow (2.6.1)
pip (9.0.1)
Pygments (2.0.1)
python-apt (0.9.3.12)
python-debian (0.1.27)
python-debianbts (1.11)
PyYAML (3.12)
reportbug (6.6.3)
requests (2.11.1)
roman (2.0.0)
setuptools (5.5.1)
six (1.10.0)
SOAPpy (0.12.22)
texttable (0.8.7)
websocket-client (0.40.0)
wstools (0.4.3)

@tokopedia
Saya mencoba menurunkan docker-compse -> kesalahan yang sama
Juga pencopotan pemasangannya tidak membantu.

docker-py hanyalah nama proyek. Ini menginstal paket python bernama buruh pelabuhan. Jadi, Anda harus menjalankan:

# python
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import docker
>>> print(docker.version)
1.10.6
>>>

Mendowngrade docker-compose tidak akan menghapus paket buruh pelabuhan dari proyek buruh pelabuhan yang diinstal di server Anda sesuai dengan keluaran pip Anda.
Hal berikut ini akan memperbaiki masalah Anda:

pip uninstall docker
pip uninstall docker-py
pip uninstall docker-compose
pip install docker-compose==1.9.0

@tokopedia
Ini bekerja dengan baik. Terima kasih!

Tapi IMO ini hanyalah solusi untuk membuat semuanya tetap berjalan.
Namun demikian ini harus diperbaiki untuk menghindari penurunan versi docker-compose.

Ada berita tentang ini?

Saya mendapatkan kesalahan yang sama saat mencoba menggunakan docker_image. Haruskah saya membuka edisi baru atau apakah ini masalah yang persis sama?


- name: Test docker install by pulling hello world image
      docker_image:
        name: hello-world

fatal: [devhost]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to import docker-py - cannot import name Client. Try `pip install docker-py`"}

pip list | grep docker

docker (2.0.2)
docker-compose (1.9.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)

Ini tidak akan bekerja dengan buruh pelabuhan dan buruh pelabuhan-py diinstal. Anda harus menghapus buruh pelabuhan dan menginstal ulang docker-py:

pip uninstall docker
pip install --ignore-installed docker-py

Ini seharusnya menyelesaikan masalah Anda.

Komit e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 ini seharusnya menyelesaikan masalah. Sampai dirilis, saya rasa kami masih menggunakan docker-compose <= 1.9.0.

Kami harus menghapus docker-compose 1.10 (versi pip), dan semua dependensinya (kebanyakan modul docker). Kami melakukan perbedaan dari status bersih dan status "tercemar" (dengan docker-compose 1.10 di pip terpasang): untuk mengembalikan, kami melakukan:
for pipPackage in cached-property colorama docker docker-compose dockerpty docopt functools32 jsonschema texttable docker-py ; do sudo pip uninstall -y ${pipPackage} 2>&1 | logger -i -t TestRemove ; done
Kemudian kami menginstal docker-compose 1.10 dengan metode curl (lihat dokumen resmi). Tidak ada masalah dengan resource docker_container. Ada masalah dengan docker_service, karena perlu docker-compose di python. Tapi kami tidak menggunakan docker_service lagi. Dependensi pip adalah neraka yang ingin kita hindari mulai sekarang !! Ini adalah solusi terbaik yang kami miliki untuk saat ini.

Komit e2a1ce2 ini seharusnya menyelesaikan masalah.

Patch ini tidak ada di Ansible 2.2.1.0 .

Saya mencoba ini hari ini dengan tags/v2.2.2.0-0.2.rc2
tapi masih ada masalah:

deploy<strong i="8">@machine1</strong>:/home/vagrant$ pip list
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
chardet (2.3.0)
colorama (0.3.7)
defusedxml (0.4.1)
docker (2.1.0)
docker-compose (1.11.2)
docker-py (1.10.6)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
docutils (0.12)
enum34 (1.1.6)
functools32 (3.2.3.post2)
iotop (0.6)
ipaddress (1.0.18)
jsonschema (2.6.0)
Pillow (2.6.1)
pip (9.0.1)
Pygments (2.0.1)
python-apt (0.9.3.12)
python-debian (0.1.27)
python-debianbts (1.11)
PyYAML (3.12)
reportbug (6.6.3)
requests (2.13.0)
roman (2.0.0)
setuptools (5.5.1)
six (1.10.0)
SOAPpy (0.12.22)
texttable (0.8.7)
websocket-client (0.40.0)
wstools (0.4.3)

deploy<strong i="9">@machine1</strong>:/home/vagrant$ docker-compose
ERROR: Dependency conflict: an older version of the 'docker-py' package is polluting the namespace. Run the following command to remedy the issue:
pip uninstall docker docker-py; pip install docker

Di sisi lain, ketika docker-py tidak diinstal ( pip uninstall docker-py ) daripada keluhan yang mungkin:

Failed to import docker-py - No module named docker. Try `pip install docker-py`

@tokopedia
Instal Ansible 2.3.0 (devel): pip install git+git://github.com/ansible/ansible.git@devel
Sekarang termasuk e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 yang memperbaiki masalah kompatibilitas.

Kapan ini akan tersedia dalam rilis?

Ada berita tentang ini?

Seperti yang dikatakan @viossat , e2a1ce2916e9b87fe1ad4a1011c04ef8d2faf046 disertakan dalam versi 2.3.0.
Ini memecahkan masalah bahkan dengan paket docker dan docker-py terpasang. Anda bisa mencobanya:

virtualenv -p /usr/bin/python2.7 /tmp/venv
source /tmp/venv/bin/activate
pip install https://github.com/ansible/ansible/archive/v2.3.0.0-0.1.rc1.zip
pip install docker docker-py
ansible localhost -m docker_container -a "name=foo image=busybox"

Dukungan untuk pustaka buruh pelabuhan baru disertakan dalam rilis Ansible 2.3. Karena ini (IMO) adalah fitur untuk menambahkan dukungan baru untuk docker-py v2, menurut saya ini tidak cocok dengan kebijakan backport kami.

Bekerja dengan baik dengan kemungkinan 2.3
Saya hanya harus memastikan, bahwa docker-py tidak lagi diinstal tetapi docker tersedia (melalui pip).

Terima kasih banyak!

Seperti yang dikatakan @guenhter . Ia bekerja dengan Ansible 2.3 jika Anda menghapus modul docker-py lama

- name: remove docker-py
  pip:
    name: docker-py
    state: absent

- name: Install docker python module
  pip:
    name: "docker-compose==1.12.0"

@martonsz Halo Saya punya Ansible 2.3 tapi

 - name: Test docker install by pulling hello world image
   docker_container:
     name: hello-world

jangan bekerja untukku.

daftar pip:

backports.ssl-match-hostname (3.5.0.1)
cached-property (1.3.0)
cffi (1.5.2)
chardet (2.3.0)
click (6.7)
colorama (0.3.7)
configobj (5.0.6)
Django (1.9.4)
django-debug-toolbar (1.4)
docker (2.2.1)
docker-compose (1.12.0)
docker-pycreds (0.2.1)
dockerpty (0.4.1)
docopt (0.6.2)
html5lib (0.999)
jsonschema (2.6.0)
misaka (2.0.0)
mycli (1.8.1)
mysqlclient (1.3.7)
okapi2 (0.0.1)
pip (8.1.1)
prompt-toolkit (1.0.13)
pycparser (2.14)
pycrypto (2.6.1)
Pygments (2.2.0)
pygobject (3.14.0)
PyMySQL (0.7.10)
python-apt (0.9.3.12)
PyYAML (3.12)
requests (2.11.1)
setuptools (5.5.1)
six (1.8.0)
sqlparse (0.2.1)
texttable (0.8.8)
unattended-upgrades (0.1)
urllib3 (1.9.1)
uWSGI (2.0.12)
virtualenv (15.0.1)
wcwidth (0.1.7)
websocket-client (0.40.0)

Kesalahan:

TASK [confluence : Test docker install by pulling hello world image] *************************************
fatal: [web1-vultr]: FAILED! => {"changed": false, "failed": true, "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"}
        to retry, use: --limit @/home/martin/Work/ansible/site.retry

ansible --version:

ansible 2.3.0.0
  config file = /etc/ansible/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.12 (default, Nov 19 2016, 06:48:10) [GCC 5.4.0 20160609]

@Applemann Saya telah menginstal "docker-py" sebelumnya - Saya harus pip uninstall docker; pip install docker dan kemudian mulai bekerja ... tidak tahu apa yang terjadi.

@matti Saya menyelesaikannya dengan menambahkan parameter -e 'ansible_python_interpreter=/usr/bin/python3' ketika saya menjalankan ansible-playbook.
Karena di server sudah menggunakan python3, tapi di localhost saya sudah default python 2.7

Saya masih mengalami masalah ini dengan 2.3.0.0.

Telah mendokumentasikan Stack Overflow di sini: http://stackoverflow.com/a/43975079/1064619

Langkah-langkah untuk mereproduksi:

Saya membuat VirtualEnv baru:

zoidberg:foley chris$ virtualenv ansible-test
New python executable in /Users/chris/src/hc/foley/ansible-test/bin/python2.7
Also creating executable in /Users/chris/src/hc/foley/ansible-test/bin/python
Installing setuptools, pip, wheel...done.

Dipasang Mungkin:

(ansible-test) zoidberg:foley chris$ pip install ansible
Collecting ansible
Collecting pycrypto>=2.6 (from ansible)
Collecting paramiko (from ansible)
  Using cached paramiko-2.1.2-py2.py3-none-any.whl
Collecting jinja2 (from ansible)
  Using cached Jinja2-2.9.6-py2.py3-none-any.whl
Requirement already satisfied: setuptools in ./ansible-test/lib/python2.7/site-packages (from ansible)
Collecting PyYAML (from ansible)
Collecting cryptography>=1.1 (from paramiko->ansible)
  Using cached cryptography-1.8.1-cp27-cp27m-macosx_10_10_intel.whl
Collecting pyasn1>=0.1.7 (from paramiko->ansible)
  Using cached pyasn1-0.2.3-py2.py3-none-any.whl
Collecting MarkupSafe>=0.23 (from jinja2->ansible)
Requirement already satisfied: six>=1.6.0 in ./ansible-test/lib/python2.7/site-packages (from setuptools->ansible)
Requirement already satisfied: packaging>=16.8 in ./ansible-test/lib/python2.7/site-packages (from setuptools->ansible)
Requirement already satisfied: appdirs>=1.4.0 in ./ansible-test/lib/python2.7/site-packages (from setuptools->ansible)
Collecting idna>=2.1 (from cryptography>=1.1->paramiko->ansible)
  Using cached idna-2.5-py2.py3-none-any.whl
Collecting enum34 (from cryptography>=1.1->paramiko->ansible)
  Using cached enum34-1.1.6-py2-none-any.whl
Collecting ipaddress (from cryptography>=1.1->paramiko->ansible)
  Using cached ipaddress-1.0.18-py2-none-any.whl
Collecting cffi>=1.4.1 (from cryptography>=1.1->paramiko->ansible)
  Using cached cffi-1.10.0-cp27-cp27m-macosx_10_6_intel.whl
Collecting asn1crypto>=0.21.0 (from cryptography>=1.1->paramiko->ansible)
  Using cached asn1crypto-0.22.0-py2.py3-none-any.whl
Requirement already satisfied: pyparsing in ./ansible-test/lib/python2.7/site-packages (from packaging>=16.8->setuptools->ansible)
Collecting pycparser (from cffi>=1.4.1->cryptography>=1.1->paramiko->ansible)
Installing collected packages: pycrypto, idna, enum34, ipaddress, pycparser, cffi, asn1crypto, cryptography, pyasn1, paramiko, MarkupSafe, jinja2, PyYAML, ansible
Successfully installed MarkupSafe-1.0 PyYAML-3.12 ansible-2.3.0.0 asn1crypto-0.22.0 cffi-1.10.0 cryptography-1.8.1 enum34-1.1.6 idna-2.5 ipaddress-1.0.18 jinja2-2.9.6 paramiko-2.1.2 pyasn1-0.2.3 pycparser-2.17 pycrypto-2.6.1

Memeriksa versinya:

(ansible-test) zoidberg:foley chris$ ansible --version
ansible 2.3.0.0
  config file =
  configured module search path = Default w/o overrides
  python version = 2.7.13 (default, May 14 2017, 22:38:03) [GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.42)]

Docker dan docker-py yang diinstal:

(ansible-test) zoidberg:foley chris$ pip list | grep docker
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
docker (2.0.0)
docker-py (1.10.6)
docker-pycreds (0.2.1)

Tapi saya masih mendapatkan kesalahan yang sama:

(ansible-test) zoidberg:foley chris$ ansible-playbook -i inventory/local build.yml -vvvv
No config file found; using defaults
Loading callback plugin default of type stdout, v2.0 from /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/plugins/callback/__init__.pyc

PLAYBOOK: build.yml **********************************************************************************************************************************************************
1 plays in build.yml

PLAY [Build foley docker images] *********************************************************************************************************************************************
META: ran handlers

TASK [docker_image] **********************************************************************************************************************************************************
task path: /Users/chris/src/hc/foley/build.yml:12
Using module file /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/modules/cloud/docker/docker_image.py
<localhost> ESTABLISH LOCAL CONNECTION FOR USER: chris
<localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
<localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889 `" && echo ansible-tmp-1494837576.9-236428678313889="` echo /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889 `" ) && sleep 0'
<localhost> PUT /var/folders/zn/cfj4ng250293z1g5s19w3zdh0000gn/T/tmp_SRwg6 TO /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/docker_image.py
<localhost> EXEC /bin/sh -c 'chmod u+x /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/ /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/docker_image.py && sleep 0'
<localhost> EXEC /bin/sh -c '/usr/bin/python /Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/docker_image.py; rm -rf "/Users/chris/.ansible/tmp/ansible-tmp-1494837576.9-236428678313889/" > /dev/null 2>&1 && sleep 0'
fatal: [127.0.0.1 -> localhost]: FAILED! => {
    "changed": false,
    "failed": true,
    "invocation": {
        "module_args": {
            "api_version": null,
            "archive_path": null,
            "buildargs": {
                "PRIVATE_REPO_PASSWORD": "6c50ef3a91e9b5cd47251f921f3fb53d1e53afa5",
                "PRIVATE_REPO_USERNAME": "hexagonalwax"
            },
            "cacert_path": null,
            "cert_path": null,
            "container_limits": null,
            "debug": false,
            "docker_host": null,
            "dockerfile": null,
            "filter_logger": false,
            "force": false,
            "http_timeout": null,
            "key_path": null,
            "load_path": null,
            "name": "honeycomb/foley",
            "nocache": "False",
            "path": ".",
            "pull": true,
            "push": false,
            "repository": null,
            "rm": true,
            "ssl_version": null,
            "state": "present",
            "tag": "latest",
            "timeout": null,
            "tls": null,
            "tls_hostname": null,
            "tls_verify": null,
            "use_tls": "no"
        }
    },
    "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"
}
  to retry, use: --limit @/Users/chris/src/hc/foley/build.retry

PLAY RECAP *******************************************************************************************************************************************************************
127.0.0.1                  : ok=0    changed=0    unreachable=0    failed=1

Inilah pedoman saya:

(ansible-test) zoidberg:foley chris$ cat build.yml
---
- name: Build foley docker images
  hosts: 127.0.0.1
  connection: local
  gather_facts: false

  vars_files:
    - "ansible/vars/build_secrets.yml"

  tasks:

    - docker_image:
         path: .
         name: worldofchris/foley
         buildargs:
           PRIVATE_REPO_USERNAME: "{{ PRIVATE_REPO_USERNAME }}"
           PRIVATE_REPO_PASSWORD: "{{ PRIVATE_REPO_PASSWORD }}"
      delegate_to: localhost

Dan inventaris saya:

(ansible-test) zoidberg:foley chris$ cat inventory/local
[localhost]
127.0.0.1 ansible_connection=local

Tahu apa yang saya lakukan salah?

Terima kasih

@worldofchris docker-py adalah modul yang lebih lama, di kemungkinan 2.3.0.0 coba instal hanya buruh pelabuhan tanpa docker-py:

pip uninstall docker
pip uninstall docker-py
pip install docker

dan jalankan pedoman Anda.

Jika seseorang menginstal mungkin dari awal di lingkungan centos yang bersih, bukankah Ansible seharusnya membawa versi docker py yang benar atau apakah kita selalu perlu menjalankan pip uninstall docker-py untuk pertama kalinya?

@Applemann terima kasih untuk itu. Mencoba saran Anda tetapi mendapatkan hasil yang sama:

(ansible-test) zoidberg:foley chris$ pip uninstall docker
    Uninstalling docker-2.0.0:
    ...
      Successfully uninstalled docker-2.0.0
    (ansible-test) zoidberg:foley chris$ pip uninstall docker-py
    Uninstalling docker-py-1.10.6:
    ...
      Successfully uninstalled docker-py-1.10.6
    (ansible-test) zoidberg:foley chris$ pip list | grep docker
    DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
    docker-pycreds (0.2.1)
    (ansible-test) zoidberg:foley chris$ pip install docker
    Collecting docker
      Using cached docker-2.2.1-py2.py3-none-any.whl
    Requirement already satisfied: backports.ssl-match-hostname>=3.5; python_version < "3.5" in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: ipaddress>=1.0.16; python_version < "3.3" in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: docker-pycreds>=0.2.1 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: requests!=2.11.0,!=2.12.2,>=2.5.2 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: websocket-client>=0.32.0 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Requirement already satisfied: six>=1.4.0 in ./ansible-test/lib/python2.7/site-packages (from docker)
    Installing collected packages: docker
    Successfully installed docker-2.2.1
    (ansible-test) zoidberg:foley chris$ pip list | grep docker
    DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
    docker (2.2.1)
    docker-pycreds (0.2.1)
    (ansible-test) zoidberg:foley chris$ ansible-playbook -i inventory/local build.yml -vvvv
    No config file found; using defaults
    Loading callback plugin default of type stdout, v2.0 from /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/plugins/callback/__init__.pyc

    PLAYBOOK: build.yml **********************************************************************************************************************************************************
    1 plays in build.yml

    PLAY [Build foley docker images] *********************************************************************************************************************************************
    META: ran handlers

    TASK [docker_image] **********************************************************************************************************************************************************
    task path: /Users/chris/src/hc/foley/build.yml:12
    Using module file /Users/chris/src/hc/foley/ansible-test/lib/python2.7/site-packages/ansible/modules/cloud/docker/docker_image.py
    <localhost> ESTABLISH LOCAL CONNECTION FOR USER: chris
    <localhost> EXEC /bin/sh -c 'echo ~ && sleep 0'
    <localhost> EXEC /bin/sh -c '( umask 77 && mkdir -p "` echo /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324 `" && echo ansible-tmp-1494842343.37-265680192802324="` echo /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324 `" ) && sleep 0'
    <localhost> PUT /var/folders/zn/cfj4ng250293z1g5s19w3zdh0000gn/T/tmph0iFSY TO /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/docker_image.py
    <localhost> EXEC /bin/sh -c 'chmod u+x /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/ /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/docker_image.py && sleep 0'
    <localhost> EXEC /bin/sh -c '/usr/bin/python /Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/docker_image.py; rm -rf "/Users/chris/.ansible/tmp/ansible-tmp-1494842343.37-265680192802324/" > /dev/null 2>&1 && sleep 0'
    fatal: [127.0.0.1 -> localhost]: FAILED! => {
        "changed": false,
        "failed": true,
        "invocation": {
            "module_args": {
                "api_version": null,
                "archive_path": null,
                "buildargs": {
                    "PRIVATE_REPO_PASSWORD": "6c50ef3a91e9b5cd47251f921f3fb53d1e53afa5",
                    "PRIVATE_REPO_USERNAME": "hexagonalwax"
                },
                "cacert_path": null,
                "cert_path": null,
                "container_limits": null,
                "debug": false,
                "docker_host": null,
                "dockerfile": null,
                "filter_logger": false,
                "force": false,
                "http_timeout": null,
                "key_path": null,
                "load_path": null,
                "name": "honeycomb/foley",
                "nocache": "False",
                "path": ".",
                "pull": true,
                "push": false,
                "repository": null,
                "rm": true,
                "ssl_version": null,
                "state": "present",
                "tag": "latest",
                "timeout": null,
                "tls": null,
                "tls_hostname": null,
                "tls_verify": null,
                "use_tls": "no"
            }
        },
        "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"
    }
      to retry, use: --limit @/Users/chris/src/hc/foley/build.retry

    PLAY RECAP *******************************************************************************************************************************************************************
    127.0.0.1                  : ok=0    changed=0    unreachable=0    failed=1

Sudahkah saya mengikuti instruksi Anda dengan benar?

Bersulang

Chris

@worldofchris Anda juga dapat mencoba menjalankannya dengan interpreter python3 alih-alih python 2.7
Karena saya memiliki masalah yang sama di sini: https://github.com/ansible/ansible/issues/20492#issuecomment -293644891
Dan saya mengatasinya dengan menjalankan playbook di bawah python3.

Terima kasih @Applemann mengalihkannya ke Python 3 dan berhasil. Saya membutuhkan alasan untuk pindah ke Python 3 jadi ini yang terbaik.

Bersulang!

Terima kasih @Applemann beralih ke python3 dan menunjuk ke penerjemah python di virtualenv juga berfungsi.

ansible-playbook docker-test.yml \
       -e 'ansible_python_interpreter=/data/python/envs/ansible/bin/python3'

Mengalami masalah ini juga dengan

``
Python 2.7.13
pip 9.0.1 dari /usr/lib/python2.7/dist-packages (python 2.7)
ansible 2.3.0.0 (pada mesin lokal)

Klien:
Versi: 1.12.6.0
Versi API: 1.24
Go versi: go1.7.4
Git commit: 78d1802
Dibangun: Sel 14 Mar 09:47:15 2017
OS / Arch: linux / amd64

Server:
Versi: 1.12.6.0
Versi API: 1.24
Go versi: go1.7.4
Git commit: 78d1802
Dibangun: Sel 14 Mar 09:47:15 2017
OS / Arch: linux / amd64
`` ''

Menyetel python3 sebagai dapat dijalankan tidak menyelesaikan masalah ini untuk saya. Berhasil membuatnya bekerja dengan melakukan pip install docker docker-compose (tidak ada docker-py sekarang) seperti yang disarankan. Tanpa docker-compose melalui pip modul docker_container dapat bekerja, docker_service tidak.

Ini tidak ada hubungannya dengan masalah ini. Docker-compose selalu diperlukan untuk modul docker_service.

Selain itu, docker dan docker-py tidak dapat dipasang bersama saat ini, jadi jika keduanya diinstal mungkin akan menimbulkan masalah.

Sekarang sudah diperbaiki di 2.3.0. Anda hanya perlu menginstal docker-compose terbaru melalui pip di remote, lalu coba jalankan dan ini akan memberi tahu Anda paket lama mana yang perlu Anda hapus.

Mengapa masalah ini masih terbuka?

Masih melihat masalah ini di Ansible 2.3.0:

$ ansible --version                                                        
ansible 2.3.0.0              
  config file = /vagrant/ansible/ansible.cfg       
  configured module search path = [u'./library']
  python version = 2.7.6 (default, Oct 26 2016, 20:30:19) [GCC 4.8.4]      
$ pip freeze | grep docker                                                        
docker==2.3.0                                       
docker-compose==1.14.0
docker-pycreds==0.2.1
dockerpty==0.4.1  

Kesalahan Playbook dengan modul docker_container :

GAGAL! => {"berubah": false, "gagal": true, "msg": "Gagal mengimpor docker-py - Tidak ada modul bernama buruh pelabuhan. Coba pip install docker-py "

OS: Ubuntu 14.04.5 dengan 3.13.0-121-generik x86_64 (kotak gelandangan)
Versi Python: 2.7.6

EDIT: Ini diselesaikan dengan memastikan bahwa kotak TARGET memiliki modul pip ini terpasang, bukan hanya kotak yang menjalankan:

- name: Ensure old module not present
  pip:
    name: docker-py
    state: absent
- name: Install pip modules on target box
  pip:
    name: "{{ item }}"
    state: present
  with_items:
    - docker
    - docker-compose

Masih terjadi pada saya di kemungkinan 2.3.1.0:

$ ansible --version
ansible 2.3.1.0
  config file = /home/reegnz/demo/ansible.cfg
  configured module search path = Default w/o overrides
  python version = 2.7.5 (default, Aug  2 2016, 04:20:16) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)]

Saya sedang mempersiapkan virtualenv yang hanya berisi docker-compose, yang menarik buruh pelabuhan sebagai ketergantungan transitif.

$ virtualenv venv
$ source venv/bin/activate
(venv) $ pip install --upgrade pip
Downloading/unpacking pip from https://pypi.python.org/packages/11/b6/abcb525026a4be042b486df43905d6893fb04f05aac21c32c638e939e447/pip-9.0.1.tar.gz#md5=35f01da33009719497f01a4ba69d63c9
  Downloading pip-9.0.1.tar.gz (1.2MB): 1.2MB downloaded
  Running setup.py egg_info for package pip
    /usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
      warnings.warn(msg)

    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.landscape.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    warning: no previously-included files found matching 'appveyor.yml'
    no previously-included directories found matching '.github'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
Installing collected packages: pip
  Found existing installation: pip 1.4.1
    Uninstalling pip:
      Successfully uninstalled pip
  Running setup.py install for pip
    /usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'python_requires'
      warnings.warn(msg)

    warning: no previously-included files found matching '.coveragerc'
    warning: no previously-included files found matching '.mailmap'
    warning: no previously-included files found matching '.travis.yml'
    warning: no previously-included files found matching '.landscape.yml'
    warning: no previously-included files found matching 'pip/_vendor/Makefile'
    warning: no previously-included files found matching 'tox.ini'
    warning: no previously-included files found matching 'dev-requirements.txt'
    warning: no previously-included files found matching 'appveyor.yml'
    no previously-included directories found matching '.github'
    no previously-included directories found matching '.travis'
    no previously-included directories found matching 'docs/_build'
    no previously-included directories found matching 'contrib'
    no previously-included directories found matching 'tasks'
    no previously-included directories found matching 'tests'
    Installing pip script to /home/reegnz/test/venv/bin
    Installing pip2.7 script to /home/test/venv/bin
    Installing pip2 script to /home/test/venv/bin
Successfully installed pip
Cleaning up...
(venv) $ pip install docker-compose
Collecting docker-compose
  Using cached docker_compose-1.14.0-py2.py3-none-any.whl
Collecting cached-property<2,>=1.2.0 (from docker-compose)
  Using cached cached_property-1.3.0-py2.py3-none-any.whl
Collecting backports.ssl-match-hostname>=3.5; python_version < "3.5" (from docker-compose)
Collecting ipaddress>=1.0.16; python_version < "3.3" (from docker-compose)
  Using cached ipaddress-1.0.18-py2-none-any.whl
Collecting jsonschema<3,>=2.5.1 (from docker-compose)
  Using cached jsonschema-2.6.0-py2.py3-none-any.whl
Collecting texttable<0.9,>=0.8.1 (from docker-compose)
Collecting six<2,>=1.3.0 (from docker-compose)
  Using cached six-1.10.0-py2.py3-none-any.whl
Collecting docker<3.0,>=2.3.0 (from docker-compose)
  Using cached docker-2.4.0-py2.py3-none-any.whl
Collecting enum34<2,>=1.0.4; python_version < "3.4" (from docker-compose)
  Using cached enum34-1.1.6-py2-none-any.whl
Collecting websocket-client<1.0,>=0.32.0 (from docker-compose)
  Using cached websocket_client-0.44.0-py2.py3-none-any.whl
Collecting PyYAML<4,>=3.10 (from docker-compose)
Collecting colorama<0.4,>=0.3.7 (from docker-compose)
  Using cached colorama-0.3.9-py2.py3-none-any.whl
Collecting requests!=2.11.0,<2.12,>=2.6.1 (from docker-compose)
  Using cached requests-2.11.1-py2.py3-none-any.whl
Collecting docopt<0.7,>=0.6.1 (from docker-compose)
Collecting dockerpty<0.5,>=0.4.1 (from docker-compose)
Collecting functools32; python_version == "2.7" (from jsonschema<3,>=2.5.1->docker-compose)
Collecting docker-pycreds>=0.2.1 (from docker<3.0,>=2.3.0->docker-compose)
  Using cached docker_pycreds-0.2.1-py2.py3-none-any.whl
Installing collected packages: cached-property, backports.ssl-match-hostname, ipaddress, functools32, jsonschema, texttable, six, websocket-client, docker-pycreds, requests, docker, enum34, PyYAML, colorama, docopt, dockerpty, docker-compose
Successfully installed PyYAML-3.12 backports.ssl-match-hostname-3.5.0.1 cached-property-1.3.0 colorama-0.3.9 docker-2.4.0 docker-compose-1.14.0 docker-pycreds-0.2.1 dockerpty-0.4.1 docopt-0.6.2 enum34-1.1.6 functools32-3.2.3.post2 ipaddress-1.0.18 jsonschema-2.6.0 requests-2.11.1 six-1.10.0 texttable-0.8.8 websocket-client-0.44.0

(venv) $ pip freeze > venv-requirements.txt

File venv-requirement.txt terlihat seperti ini:

( venv) $ cat venv-requirements.txt
backports.ssl-match-hostname==3.5.0.1
cached-property==1.3.0
colorama==0.3.9
docker==2.4.0
docker-compose==1.14.0
docker-pycreds==0.2.1
dockerpty==0.4.1
docopt==0.6.2
enum34==1.1.6
functools32==3.2.3.post2
ipaddress==1.0.18
jsonschema==2.6.0
PyYAML==3.12
requests==2.11.1
six==1.10.0
texttable==0.8.8
websocket-client==0.44.0

Saya menginstal virtualenv di mesin jarak jauh saya ke / opt / ansible / venv dengan file persyaratan pip di atas, dan saya mengganti ansible_python_interpreter dengan skrip berikut / opt / ansible / python-venv:

#!/bin/bash
source /opt/ansible/venv/bin/activate
python "$@"

Saya masih mendapatkan kesalahan berikut dari ansible-playbook:

fatal: [localhost]: FAILED! => {
    "changed": false,
    "failed": true,
    "invocation": {
        "module_args": {
            "api_version": null,
            "build": false,
            "cacert_path": null,
            "cert_path": null,
            "debug": false,
            "definition": null,
            "dependencies": true,
            "docker_host": null,
            "files": null,
            "filter_logger": false,
            "hostname_check": false,
            "key_path": null,
            "nocache": false,
            "project_name": null,
            "project_src": "/opt/test",
            "pull": true,
            "recreate": "smart",
            "remove_images": null,
            "remove_orphans": false,
            "remove_volumes": false,
            "restarted": false,
            "scale": null,
            "services": null,
            "ssl_version": null,
            "state": "present",
            "stopped": false,
            "timeout": 10,
            "tls": null,
            "tls_hostname": null,
            "tls_verify": null
        }
    },
    "msg": "Failed to import docker-py - No module named docker. Try `pip install docker-py`"
}

Saya juga mencoba menginstal paket docker-compose dan docker-py tetapi tidak berhasil. Saya masih mendapatkan pesan kesalahan yang sama.

Ternyata skrip python-venv yang saya kutip salah dan berhasil.
Ini adalah naskah saya, bukan yang saya kutip ...

#!/bin/bash
source /opt/ansible/bin/activate
python "$@"

Perhatikan 'venv' yang hilang di jalur.

Pesan kesalahan tidak sepenuhnya jelas, itulah mengapa saya butuh beberapa saat untuk men-debug. Json tidak mengandung pesan kesalahan python.
Maaf untuk ketidaknyamanannya.

memungkinkan 2.3.0.0
versi python = 2.7.13

$ pip daftar | grep buruh pelabuhan
PENGHENTIAN: Format default akan beralih ke kolom di masa mendatang. Anda dapat menggunakan --format = (legacy | kolom) (atau menentukan format = (legacy | kolom) di pip.conf Anda di bawah bagian [daftar]) untuk menonaktifkan peringatan ini.
buruh pelabuhan (2.4.2)
buruh pelabuhan-menulis (1.14.0)
buruh pelabuhan-pycreds (0.2.1)
buruh pelabuhan (0.4.1)

Kesalahan: GAGAL! => {"berubah": false, "gagal": true, "msg": "Gagal mengimpor docker-py - Tidak ada modul bernama buruh pelabuhan. Coba pip install docker-py "}

Tolong sarankan solusi untuk ini. Saya belum mencobanya di virtualenv, disebutkan dalam komentar reegnz.

Bagi orang yang malas membaca setiap postingan di sini:
Sejak ansible 2.3, masalah ketergantungan docker-py telah diperbaiki:

  • jika Anda menggunakan python 2.7 default, modul buruh pelabuhan membutuhkan docker-py

  • jika Anda menggunakan python 3 ( -e 'ansible_python_interpreter=/usr/bin/python3' ), dibutuhkan buruh pelabuhan daripada docker-py
    dalam semua kasus, bersihkan dengan pip uninstall docker docker-py docker-compose
    instal ulang
    pip install docker-compose

python 3 tidak ada di distribusi besar seperti CentOS / RHEL.

Saya akan menambahkan, di atas @antoinetran bahwa, dengan python 2.7, seseorang tidak dapat memiliki keduanya: ansible dan docker-compose happy.
-> modul yang memungkinkan seperti buruh pelabuhan & buruh pelabuhan-login membutuhkan buruh pelabuhan-py
-> docker-compose membutuhkan buruh pelabuhan (dan tidak bekerja jika buruh pelabuhan dan buruh pelabuhan diinstalasi):

docker-compose
WARNING: Dependency conflict: an older version of the 'docker-py' package may be polluting the namespace. If you're experiencing crashes, run the following command to remedy the issue:
pip uninstall docker-py; pip uninstall docker; pip install docker

Jadi itu bisa bekerja atau buruh pelabuhan-menulis. Berantakan.
Saya tidak jelas mengapa masalah ini ditutup, karena tampaknya memungkinkan untuk memperbarui modul agar berfungsi dengan buruh pelabuhan daripada buruh pelabuhan-py, bahkan untuk 2.7, seperti yang dilakukan buruh pelabuhan-pembuatan.

Edit - berfungsi - kesalahan pengguna: Dalam kasus saya, ini bukan bug. Untuk orang lain yang mengalami ini, coba jalankan dengan -vvvv. Saya melihat bahwa ansible menggunakan /usr/bin/python . Saya harus mengatur ansible_python_interpreter ke python yang dapat dieksekusi di mesin host saya di virtualenv tempat pip menginstal sesuatu. Itu mengubah kesalahan menjadi file tidak ditemukan yang membuat saya menyadari semua kesalahan itu berasal dari mesin target. Jadi saya mengganti ansible_python_interpreter menjadi python yang dapat dieksekusi dari mesin target, menginstal docker-py pada mesin target, dan mendapat kesalahan berbeda tentang beberapa ketergantungan terkait lainnya (websockets atau permintaan atau sesuatu) yang tidak diinstal. Lalu saya mencopot pemasangan buruh pelabuhan / buruh pelabuhan pada mesin target dan memasang pembuat buruh pelabuhan. Kemudian semuanya berhasil.


Teks asli - edit sebelumnya:

Hanya pembaruan dengan beberapa info lebih lanjut tentang sistem yang gagal.

Mac 10.12.6
Versi Docker 17.09.0-ce-mac35 (19611)
memungkinkan 2.4.0.0
pip hapus instalan buruh pelabuhan docker-py buruh pelabuhan-menulis
pip instal docker-compose

docker_image

FAILED! => {"changed": false, "failed": true, "msg": "Failed to import docker-py - No module named requests.exceptions. Try `pip install docker-py`"}
ansible localhost -m shell -a "python -c 'import requests.exceptions'"
localhost | SUCCESS | rc=0 >>

Saya memiliki masalah sampel,
fatal: [localhost -> localhost]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named requests.exceptions. Try 'pip install docker-py'"}

Tidak ada yang disebutkan di utas ini yang membantu. Saya menurunkan peringkat, dan semuanya berhasil.
pip install ansible==2.3.3.0

Pengguna terus mengalami masalah ini sejak satu tahun. Mengapa tiket ini ditutup?

Timo Soini

Masalah yang sama, "Controller" di Mac, "Managed-Host" di RPi, telah mengalami masalah ini selama 3 minggu. Saya mencatat masalah saya sendiri, mereka menutupnya, jadi kemana kita akan pergi dari sini?

Inilah yang saya buka, dan segera ditutup. https://github.com/ansible/ansible/issues/34851

"Ini bukan masalah dengan ansible, melainkan masalah potensial dengan upstream docker-py / docker: docker / docker-py # 1353

Tetapi tidak ada jawaban di tautan di atas juga.

Saya mendapatkan kesalahan dan menjalankan "pip install docker-py" memperbaikinya, seperti yang dikatakan pesan kesalahan. Mungkin 2.4.2.0.

Mengapa masalah ini ditutup? Kami menginstal 2.4.2.0 terbaru di RedHat 7.4 terbaru, yang merupakan mesin bersih dari awal. Ini membutuhkan docker-py dan python3 tidak diinstal. RPM yang memungkinkan menyediakan docker.py, dan BUKAN docker-py. Tidak konsisten dengan Ansible untuk menginstal docker.py dan menggunakan docker-py.py.

Saya menghadapi masalah dalam ansible==2.5.0 . Bantuan apa pun sangat dihargai.

Silakan coba resolusi yang disebutkan di sini https://github.com/ansible/ansible/issues/20492#issuecomment -361724244 - Ansible menyertakan modul buruh pelabuhan, tapi TIDAK menyertakan SDK buruh pelabuhan (diperlukan untuk berkomunikasi dengan daemon buruh pelabuhan). Itu perlu dipasang jika Anda ingin menggunakan modul.

@ryansb Saya dapat mereproduksi masalah dengan Ansible 2.5.0 di python3.

fatal: [db01]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named requests.exceptions. Try `pip install docker-py`"}

Meskipun:

$ pip3 freeze |grep docker
docker-py==1.10.6
docker-pycreds==0.2.2

Menurunkan versi ke Ansible 2.4.3.0 tidak menyelesaikan masalah.
Saya memiliki kecurigaan bahwa ini mungkin ada hubungannya dengan py2 vs py3 tetapi saya tidak punya waktu untuk mereproduksi di py2 sekarang.

FWIW Saya melihat ini di Ubuntu dan Fedora sebagai node kontrol.

Saya mulai menginstal ansible dengan nix package manager untuk memastikannya selalu
memiliki dependensi yang benar dan tidak ada pustaka python tambahan di python
jalan. Saya setuju ini bukan masalah yang mungkin, ini adalah perpustakaan hulu
masalah, tetapi jika status sistem Anda mencegah kemungkinan untuk bekerja, nix
memecahkan masalah dengan sangat rapi.

Pada hari Senin, 2 April 2018, 18:31 David Moreau Simard [email protected]
menulis:

@ryansb https://github.com/ryansb Saya dapat mereproduksi masalah tersebut dengan
Kemungkinan 2.5.0 di python3.

fatal: [db01]: GAGAL! => {"berubah": false, "msg": "Gagal mengimpor docker-py - Tidak ada modul bernama requests.exceptions. Coba pip install docker-py "}

Meskipun:

$ pip3 beku | grep buruh pelabuhan
buruh pelabuhan-py == 1.10.6
buruh pelabuhan-pycreds == 0.2.2

Menurunkan versi ke Ansible 2.4.3.0 tidak menyelesaikan masalah.
Saya memiliki kecurigaan bahwa ini mungkin ada hubungannya dengan py2 vs py3 tetapi saya tidak
punya waktu untuk mereproduksi di py2 sekarang.

FWIW Saya melihat ini di Ubuntu dan Fedora sebagai node kontrol.

-
Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/ansible/ansible/issues/20492#issuecomment-378067072 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AAnvxX5ctoUwDA-3VUVyTjh_k3vyMIa8ks5tkqbRgaJpZM4LpGqv
.

@ryansb Terima kasih atas bantuannya. Namun sayangnya itu tidak memperbaiki masalah.

tidak ada

> nix-env -qa|grep sible
python2.7-ansible-2.1.4.0
python2.7-ansible-2.2.1.0
python2.7-ansible-2.3.2.0
python2.7-ansible-2.4.2.0
python2.7-ansible-lint-3.4.20
vimplugin-sensible-2018-01-22
> nix-env -i python2.7-ansible-2.4.2.0

Harap buka kembali masalah ini.

@jpiron, apakah Anda memiliki status terkini terkait dengan ini?

Melalui seluruh solusi utas, tidak ada yang berhasil.

fatal: [172.16.101.44]: FAILED! => {"changed": false, "msg": "Failed to import docker-py - No module named 'docker'. Try `pip install docker-py`"}

@lifenautjoe sudahkah Anda mencoba https://github.com/ansible/ansible/issues/20492#issuecomment -307642085

Jika Anda telah menginstal modul docker-py dan masih mengalami masalah ini, itu karena Anda tidak menggunakan interpreter Python yang benar dengan Ansible. Jika, misalnya, Anda memiliki Python 2 dan 3 yang diinstal dan diinstal dengan pip3 install docker-py tetapi Ansible menggunakan Python 2, ia tidak akan melihat modul seperti yang diinstal di direktori paket situs Python3.

Dalam kasus ini, Anda perlu menyetel ansible_python_interpreter pada host di inventaris Anda. Lihat http://docs.ansible.com/ansible/latest/reference_appendices/python_3_support.html untuk informasi lebih lanjut tentang ansible_python_interpreter .

Ini bukan bug Ansible, ini adalah masalah di lingkungan sistem Python.

Hai @antoinetran , saya lakukan. Saya sebenarnya mulai dengan python3 dan diturunkan ke python2 sekarang. Masih kesalahan tetapi sekarang terkait dengan paket permintaan (menginstalnya juga tidak menyelesaikannya) ☹️

@lifenautjoe tampaknya ada masalah dengan sistem Anda. Jika Anda memerlukan bantuan, silakan menuju ke Grup Google atau #ansible channel di Freenode untuk mencari nasihat dari komunitas. https://docs.ansible.com/ansible/latest/community/communication.html

tldr; lakukan un / installasi di atas pada host target .

Saya mengalami kesalahan ini menggunakan modul yang memungkinkan docker_service dan docker_container. Saya mencoba semua hal di atas tetapi tidak ada yang berhasil. Saya menghabiskan waktu yang sangat lama untuk mencoba mencari tahu apa yang sedang terjadi sampai saya menyadari bahwa kesalahan tersebut berasal dari target jarak jauh saya ... Yang harus saya lakukan adalah mengikuti komentar @jpiron untuk menginstal docker-compose 1.9.0 pada remote control target alih-alih lokasi lokal saya tempat buku pedoman saya ada dan semuanya berfungsi.

Semoga ini memecahkan beberapa misteri.

Seperti yang lain, saya menerima kesalahan yang sama Gagal mengimpor docker-py melalui pembuatan Terraform.

pip install --user --upgrade pip

merusak segalanya untukku. Inilah lingkungan kerja saya:

Ubuntu 16.04
- python 2.7.12
- pip 8.1.1
- ansible 2.5.1
- docker 18.03.0-ce
- docker-compose 1.21.0

Semoga membantu.

Masih menghadapi masalah terkait paket ini di 2.5.3. Saat menginstal docker-py dalam Python2.7, modul docker-container berfungsi dengan baik, tetapi docker-service tidak karena memerlukan Docker compose untuk diinstal.

Ketika mengikuti instruksi instalasi yang disediakan oleh Ansible pip install docker-compose , itu juga menginstal versi Python 3 dari paket docker , yang memecah modul docker-container . Menghapus secara manual docker juga tidak membantu dan masih gagal dengan pesan _Failed to import docker-py_.

Sangat tidak jelas bagaimana melanjutkan dan memiliki kedua modul bekerja pada waktu yang sama.

Pada titik ini, mungkin lebih baik untuk membuka terbitan baru, karena yang ini sudah ditutup dan mungkin pengembang Ansible tidak melihat ini lagi.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat