私は この投稿 をチェックし、両方の回答で修正を追跡しましたが、どちらも機能しませんでした。それが原因の場合もあれば、問題が同じであっても少し異なるエラーが発生する場合もあるため、新しい投稿を開いています。
Ansibleホスト:
$ ansible --version
ansible 2.1.0.0
config file = /etc/ansible/ansible.cfg
configured module search path = Default w/o overrides
宛先クライアントmyserver:
$ pip list | egrep 'six|docker|websocket_client'
docker-py (1.2.3)
six (1.10.0)
test.yml:
---
- hosts: myserver
remote_user: root
tasks:
- name: stop any running docker registries
docker_container:
name: registry
state: stopped
...
Ansibleサーバー(apにエイリアスされたansible-playbook):
$ 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":
(関連するエラー):
"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/
chmod -R go+rx docker*
から。
誰かこれを見たことがある? pip ansibleモジュールを使用してモジュールをインストールしてから、手動で削除した後、参照されている投稿のように手動で再インストールしました。また、2.1.0.0を使用しています。ご覧のとおり、この問題を修正するはずでした。
これは、pythonモジュールの新しいバージョンdocker
およびdocker-py
ansibleの使用には互換性がありません。私は元に戻して、次のバージョンの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 }
それ以来、私のプレイブックはすべて正常に動作します。
私にとっては、docker-py
へのパスを指定することができました。
- hosts: <Host>
environment:
PYTHONPATH: "/home/path/.local/lib/python2.7/site-packages"
基本的に、Ansibleは間違ったディレクトリを探していました。
この問題に関する素晴らしい記事を書いたクレイグラハムの功績は次のとおりです。
https://medium.com/dronzebot/ansible-and-docker-py-path-issues-and-resolving-them-e3834d5bb79a
TL; DR
昇格されたPlaybookインスタンスが勝つため、pipに--user
フラグを使用してdocker
モジュールをインストールし、-b
または--become
フラグをansible-playbook
に使用しないでください。別のユーザー用にインストールされているdocker
モジュールが表示されません。
後から考えると、なぜ私が問題に遭遇したのか他の人には明らかだったでしょうが、何らかの理由で、pipの--user
フラグを使用してdocker
をインストールすることを選び、不幸な「アイデア」を使用して-b
または--become
オプション。
これにより、「明らかに」インストールされたdocker
モジュールが、プレイブックを実行している昇格されたAnsibleインスタンスで使用できなくなりました。誰かが「それらの日のうちの1つ」を持っていて、これを後でつまずく場合の共有。私がこのリマインダーにかなりの「愚かな税金」を支払ったので、それがあなたの助けになることを願っています。 :)
Docker *モジュールに関するansibleのドキュメントのdocker-pyモジュールの要件は実際には最新ではありませんが、一般的には、いくつかのansible-docker-pyペアが機能するはずです。
Ansible 2.1.0.0には、少なくともdocker-pyバージョン1.7.0が必要です。これには、クライアントに少なくともdocker 1.9がインストールされている必要があります。
古いバージョンのdockerを使用する必要がある場合は、Docker 1.7とansible 2.0.1.0およびdocker-py 1.4.0を使用できます。
1.6などのさらに古いバージョンのdockerが必要な場合は、ansible 1.9で立ち往生しています。
これを「hosts」ファイルに追加します。
変化する [servers:vars]
〜[your-group-of-server-names:vars]
Python> = 2.7の場合
[servers:vars]
ansible_python_interpreter=/usr/bin/python3 # For Python3 [default Ubuntu-18.04]
Python <= 2.7
[servers:vars]
ansible_python_interpreter=/usr/bin/python # For Python2.7