🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

2回答

1839閲覧

Ansibleのdocker_imageの実行時エラーについて

masaaa1217

総合スコア2

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2021/03/26 12:47

Ansibleのdocker_imageを使用しリモートでコンテナの管理を行いたい

AnsibleでDockerと連携してコンテナの管理を行おうとしています。
その際、docker-pyを使用しイメージを取得しようとしたところでエラーが発生しました。

以下のエラーを解消するにはどうしたらよいでしょうか。

発生している問題・エラーメッセージ

TASK [PUll docker image] ************************************************************ failed: [localhost] (item=<Docker Host IP>:2376) => {"ansible_loop_var": "item", "changed": false, "item": "<Docker Host IP>:2376", "msg": "state is present but all of the following are missing: source"}

該当のソースコード

yml

1--- 2- name: Management Docker 3 # host:ansibleサーバ 4 hosts: localhost 5 vars: 6 docker_hosts: 7 - '<Docker Host IP>:2376' 8 required_docker_images: "ansible/centos7-ansible" 9 tmp_dir: docker_repo 10 11 tasks: 12 ## ユーザ定義ネットワーク作成 13 - name: Create docker local network 14 docker_network: 15 docker_host: "{{ item }}" 16 name: ansible_network 17 with_items: "{{ docker_hosts }}" 18 ## Dockerイメージ取得 19 - name: PUll docker image 20 docker_image: 21 docker_host: "{{ item }}" 22 name: "{{ required_docker_images }}" 23 with_items: "{{ docker_hosts }}" 24 ## Dockerfileの準備 25 - name: Get Nginx Dockerfile 26 git: 27 repo: https://github.com/nginxinc/docker-nginx.git 28 dest: "{{ tmp_dir }}" 29 ## Docker Buildの実行 30 - name: Build Dockerfile 31 docker_image: 32 docker_host: "{{ item }}" 33 path: "{{ tmp_dir}}/stable/stretch" 34 name: nginxinc/docker-nginx 35 tag: v1 36 with_items: "{{ docker_hosts }}" 37 ## Nginx用コンテナの実行 38 - name: Run nginx docker container 39 docker_container: 40 docker_host: "{{ item }}" 41 name: "nginx-1" 42 image: "nginxinc/docker-nginx:v1" 43 networks: 44 - name: ansible_network 45 purge_networks: 8080:80 46 ports: 47 - "8080:80" 48 with_items: "{{ docker_hosts }}" 49 ## Ansible用コンテナの実行 50 - name: Run andible docker containar 51 docker_container: 52 docker_host: "{{ item }}" 53 name: "ansible-1" 54 image: "{{ required_docker_images }}" 55 command: /bin/bash 56 tty: yes 57 interactive: yes 58 with_items: "{{ docker_hosts }}"

試したこと

・ansible-galaxy collection install community.dockerを実行し再度プレイブックを実行
・docker_image→community.docker.docker_imageに変更し実行

どちらもうまく行きませんでした。

補足情報(環境)

OS:EC2(t2.micro)

Ansibleサーバ

$pip list | egrep "pip|awscli|ansible|docker" ansible 3.1.0 ansible-base 2.10.7 awscli 1.19.37 docker-py 1.10.6 docker-pycreds 0.4.0 pip 20.3.4

Docker Host

$ pip list | egrep "pip|awscli|ansible|docker" awscli 1.18.147 docker-py 1.10.6 docker-pycreds 0.4.0 pip 9.0.3
$ docker version Client: Version: 19.03.13-ce API version: 1.40 Go version: go1.13.15 Git commit: 4484c46 Built: Mon Oct 12 18:51:20 2020 OS/Arch: linux/amd64 Experimental: false Server: Engine: Version: 19.03.13-ce API version: 1.40 (minimum version 1.12) Go version: go1.13.15 Git commit: 4484c46 Built: Mon Oct 12 18:51:50 2020 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.4.1 GitCommit: c623d1b36f09f8ef6536a057bd658b3aa8632828 runc: Version: 1.0.0-rc92 GitCommit: ff819c7e9184c13b7c2607fe6c30ae19403a7aff docker-init: Version: 0.19.0 GitCommit: de40ad0

Docker API使用のため対象行を変更

$ cat /lib/systemd/system/docker.service | grep "ExecStart=/usr/bin/dockerd -H fd://" ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2376 --containerd=/run/containerd/containerd.sock $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_ADD_RUNTIMES

マニュアルやエラーについて調べましたが独力では解決には至りませんでした。
お力添えのほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

(ログインに手間取っている間に回答がありました。)
マニュアルを参考にしてください。やはり source パラメータを指定する必要があります (デフォルト値は no)

https://docs.ansible.com/ansible/latest/collections/community/docker/docker_image_module.html#ansible-collections-community-docker-docker-image-module

投稿2021/03/26 13:21

編集2021/03/26 13:49
xotaki

総合スコア50

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaaa1217

2021/03/26 13:35

URLのご提示ありがとうございます! 私の理解が及ばず申し訳ございませんが2点質問させてください。 ・sourceパラメータが必要と判断した箇所はどこでしょうか。 ・デフォルト値がnoはどこで判断されましたか?(force_sourceのデフォルト値??)
xotaki

2021/03/26 13:46

> ・sourceパラメータが必要と判断した箇所はどこでしょうか。 このモジュールは使ったことがないのですが、 ご提示のソースが docker_image で pull と指定していないので、パラメータが足りないと直感しました。 マニュアルの Examples を見ると大抵使いかたが書いてあります。 Parameters を見て理解を深める流れです。 > ・デフォルト値がnoはどこで判断されましたか?(force_sourceのデフォルト値??) ごめんなさい。別の個所を見てました。マニュアルでは青字がデフォルト値なのですが、sources にはデフォルト値は存在しませんね。
masaaa1217

2021/03/26 13:50

ご回答ありがとうございます。 マニュアルの見方大変参考になりました!
guest

0

ベストアンサー

docker_hostの設定はどのような目的でされているのでしょうか?

イメージを取得する場合は、sourceパラメータの指定が必要です。

- name: PUll docker image docker_image: name: "{{ required_docker_images }}" source: pull state: present

投稿2021/03/26 13:15

comefigo

総合スコア1051

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

masaaa1217

2021/03/26 13:31

ご回答ありがとうございます。 docker_hostを設定する目的としてはansibleサーバ(localhost)からdocker_host(クライアント)へリモートで設定したいという意図があり設定していました。(知識があいまいなため説明に間違いがありましたら申し訳ありません。。。) ご回答いただいた通りに修正しましたところ正常に動作しました! ありがとうございます。
comefigo

2021/03/26 13:37

AnsibleサーバとDocker ホストは同じEC2でしょうか?
masaaa1217

2021/03/26 13:44

その通りです。 VPCも同じものを使用しているため同じNW上に存在します。
comefigo

2021/03/26 13:53

なるほどですね。 特にdocker_hostの設定は不要かと思います。
masaaa1217

2021/03/26 14:10

そうなんですか? 例えば、 -192.168.0.1(localhost) -192.168.0.2(docker host)←これにコンテナを入れたい この場合はdocker_host: 192.168.0.2で設定すると解釈しておりました。(ansibleのhostsがlocalhostのため)
comefigo

2021/03/26 14:48

同一EC2ホストであれば、Dockerネットワークはホストのネットワークを(デフォルト)ブリッジ接続します。 docker_xxxモジュールのdocker_hostパラメータにも書いてありますが、デフォルトはunix://var/run/docker.sockを経由してDockerクライアントがDockerサーバとやり取りします。 今回DockerクライアントはAnsibleのモジュールが担います。
masaaa1217

2021/03/26 15:16

なるほどですね。 デフォルトが何を表しているのかいまいち理解できていませんでした。 comefigoさんのおかげで理解することができました。 詳しく解説していただきありがとうございます!
comefigo

2021/03/26 16:01

解決されてよかったです!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問