はじめに
docker ps
は、コンテナの稼働状況を確認する最も基本的なコマンドですが、上級者ほど「監視」「自動化」「分析」のために使いこなしています。
この記事では、単なる一覧確認に留まらず、運用効率を上げるための実践的テクニックをハンズオン形式で解説します。
1. 環境準備
まずはテスト用のコンテナをいくつか起動しておきましょう。
# nginxとredisをテスト起動
docker run -d --name webserver -p 8080:80 nginx
docker run -d --name cache redis
docker run -d --name db postgres
状態を確認します:
docker ps
出力例:
CONTAINER ID IMAGE COMMAND STATUS PORTS NAMES
2a91f7c3f2b3 nginx "/docker-entrypoint.…" Up 10 seconds 0.0.0.0:8080->80/tcp webserver
3e12bde71ef9 redis "docker-entrypoint.s…" Up 11 seconds cache
f13a8e32297a postgres "docker-entrypoint.s…" Up 11 seconds db
2. --format
で出力を整形する
docker ps
の出力は、Goテンプレートで柔軟にカスタマイズできます。
監視に必要な情報だけを整形して見やすくしましょう。
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.RunningFor}}\t{{.Ports}}"
出力例:
NAMES STATUS RUNNING FOR PORTS
webserver Up 2 minutes 2 minutes 0.0.0.0:8080->80/tcp
cache Up 2 minutes 2 minutes
db Up 2 minutes 2 minutes
応用:JSON出力 + jqで整形
docker ps --format '{{json .}}' | jq '.Names, .Status'
このようにすれば、監視スクリプトやダッシュボード連携に活用できます。
3. --filter
で条件付き出力を使いこなす
停止中コンテナや特定イメージに関連するコンテナを抽出できます。
停止中のコンテナを確認
docker ps -a --filter "status=exited"
特定イメージのコンテナを確認
docker ps --filter "ancestor=nginx"
名前で検索(部分一致)
docker ps --filter "name=web"
--filter
を組み合わせると、特定状態の検出スクリプトを容易に作成できます。
4. 実践ハンズオン:停止中コンテナの自動検出スクリプト
次に、停止したコンテナを検知して通知する簡単なスクリプトを作ってみましょう。
ファイル名:monitor_stopped_containers.sh
#!/bin/bash
STOPPED=$(docker ps -a --filter "status=exited" --format "{{.Names}}")
if [ -n "$STOPPED" ]; then
echo "[ALERT] The following containers have stopped:"
echo "$STOPPED"
else
echo "All containers are running normally."
fi
実行権限を付与してテストします:
chmod +x monitor_stopped_containers.sh
./monitor_stopped_containers.sh
出力例:
All containers are running normally.
もしコンテナを1つ停止してみると…
docker stop cache
./monitor_stopped_containers.sh
結果:
[ALERT] The following containers have stopped:
cache
これを cron
に登録すれば、定期監視スクリプトとして利用できます。
5. docker ps
× grep
で即席モニタリング
稼働中コンテナ数をカウント
docker ps -q | wc -l
特定アプリの稼働確認
docker ps | grep nginx
シンプルながら、CI/CDパイプラインやシステムチェックに組み込むことで軽量な稼働確認が可能です。
6. docker ps
と他コマンドの連携応用
docker ps
を他のDockerコマンドと組み合わせると、より高度な監視や診断が行えます。
CPU・メモリ使用率を合わせて確認
docker stats --no-stream $(docker ps -q)
詳細情報との統合
docker inspect $(docker ps -q) | jq '.[].State.Status'
これらを組み合わせれば、独自の運用ダッシュボードを自作することもできます。
7. トラブルシューティングの実践ポイント
docker ps
出力の「STATUS」欄は、トラブルの初期発見に役立ちます。
状態 | 意味 | 対応例 |
---|---|---|
Exited (0) | 正常終了 | 再実行可 |
Exited (1) | 異常終了 | ログ確認 (docker logs ) |
Restarting | 再起動ループ | コンテナ設定・アプリエラー確認 |
Up X seconds | 頻繁リスタート | ヘルスチェック設定を見直し |
状態監視例
docker ps --format "{{.Names}}: {{.Status}}" | grep Restarting
これでリスタート中コンテナを自動抽出できます。
8. docker container ls
との関係と推奨使用法
docker ps
は docker container ls
のショートエイリアスです。
今後はDocker CLI構文統一の観点から、以下のように記述しておくと保守性が高まります。
docker container ls --format "table {{.Names}}\t{{.Status}}"
9. まとめ:docker ps
を「見る」から「使う」へ
本記事では、docker ps
をただの一覧表示コマンドから、
監視・通知・可視化の起点として活用する方法を紹介しました。
ポイントおさらい:
--format
で出力整形 → 見やすく分析可能--filter
で特定条件抽出 → 異常検知に活用- スクリプト化で自動監視を実現
- 他コマンド連携で診断効率化
次のステップ
次回は以下を扱います:
docker inspect
でコンテナ内部状態を深掘りdocker stats
を使った軽量モニタリング- CLI出力をGrafanaなどに可視化連携
これにより、「手動確認 → 自動監視 → ダッシュボード可視化」 へと運用を進化させられます。
コメントを残す