質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.31%
Ansible

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

Docker

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

Q&A

解決済

2回答

1213閲覧

Ansible docker psコマンドで実行中のコンテナの起動を確認したい

khaii21

総合スコア67

Ansible

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

Docker

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

0グッド

0クリップ

投稿2023/04/25 03:45

編集2023/04/25 04:13

実現したいこと

docker psコマンドが正常に実行されず、Usageのエラーメッセージが表示されます。
コマンド内にパイプ(|)が含まれているため、それが原因と考えてエスケープさせたのですが
エラーを解消出来ません。
改善方法をお分かりの方がいらっしゃいましたらご教授頂けないでしょうか。
宜しくお願い致します。

# 実行したいコマンド $ docker ps | grep hoge_container
# 手動でコマンドを実行した結果 $ sudo docker ps | grep hoge_container mow9230nfwe docker.hoge.com:8080/hoge/hoged:0.0.1 "/usr/bin/hoge …" 26 minutes ago Up 26 minutes hoge_container
# Ansibleにて実行されていると思われるコマンド $ sudo docker ps grep hoge_container # 上記を実行すると下記のエラー "docker ps" accepts no arguments. See 'docker ps --help'. Usage: docker ps [OPTIONS] List containers

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

fatal: [localhost]: FAILED! => {"changed": true, "cmd": ["docker", "ps", "|", "grep", "hoge_container"], "delta": "0:00:00.031481", "end": "2023-04-25 11:40:56.188472", "msg": "non-zero return code", "rc": 1, "start": "2023-04-25 11:40:56.156991", "stderr": "\"docker ps\" accepts no arguments.\nSee 'docker ps --help'.\n\nUsage: docker ps [OPTIONS]\n\nList containers", "stderr_lines": ["\"docker ps\" accepts no arguments.", "See 'docker ps --help'.", "", "Usage: docker ps [OPTIONS]", "", "List containers"], "stdout": "", "stdout_lines": []}

該当のソースコード

pleybook抜粋

1- name: docker ps 2 ansible.builtin.command: docker ps | grep hoge_container

試したこと

コマンド実行箇所を下記のように修正してみましたがエラーが解消されません

ansible.builtin.command: docker ps {{ "|" }} grep hoge_container
ansible.builtin.command: docker ps \| grep hoge_container

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

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

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

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

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

guest

回答2

0

解決したようなのでいいのですが、質問にあるとおり"|"が原因です。

コマンドをパイプ(|)でつなぐことができるのは、裏で動作しているシェルがそれぞれのコマンドを解釈して実行し、その入出力をつないでいるためです。リダイレクト (">"や"<"など)なども同様です。
ところが、commandモジュールはコマンドの実行にシェルを経由しませんので、"|"はだだの文字としてコマンド、に渡さされてしまいます。
パイプなどを使ったコマンドを実行したいのであれば、shellモジュールを使うといいでしょう。

yaml

1- name: docker ps 2 ansible.builtin.shell: docker ps | grep hoge_container

投稿2023/04/25 04:52

TakaiY

総合スコア14286

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

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

khaii21

2023/04/25 09:40

ご確認ありがとうございました。
guest

0

自己解決

該当コマンド箇所を下記にしてコンテナ名を指定することで解消しました

ansible.builtin.command: docker ps -f name=hoge_container

投稿2023/04/25 04:17

khaii21

総合スコア67

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問