導入
コンテナ運用において、「コンテナは起動しているはずなのに、期待した挙動をしていない」という状況に直面したことはありませんか。アプリケーションのハングアップや高負荷の原因を特定する際、コンテナの内部にログイン(docker exec)せずにプロセス状況を把握できることは、迅速な復旧の鍵となります。本稿では、コンテナ内のプロセスを確認する最強のコマンドである「docker container top」の使い方と、現場での活用法を解説します。
基礎知識
docker container topコマンドは、ホストOSから指定したコンテナ内で現在稼働しているプロセス一覧を表示するコマンドです。Linuxのpsコマンドと同様の情報(PID、ユーザー、CPU/メモリ使用率、実行コマンドなど)をコンテナ外部から取得できます。
このコマンドが重要な理由は、以下の2点に集約されます。
1. コンテナ内部を汚さない:コンテナ内にpsコマンドやtopコマンドがインストールされていなくても、ホスト側のDockerエンジン経由で情報を取得できるため、軽量なイメージ(Alpine Linuxなど)でも問題なく使えます。
2. 非侵入的な調査:コンテナにシェルでログインするとログが残ったり、環境を操作してしまうリスクがありますが、topコマンドは純粋な参照のみを行うため、安全に調査が可能です。
実装/解決策
基本の構文は非常にシンプルです。
docker container top [コンテナ名またはID] [オプション]
もし特定の列だけを表示したい場合は、標準のpsコマンドのオプションを渡すことも可能です。例えば、プロセスID(PID)とコマンド名だけを確認したい場合は、以下のように実行します。
docker container top [コンテナ名] -eo pid,cmd
サンプルプログラム
以下のスクリプトは、特定のコンテナ名からプロセス状況を取得し、もしゾンビプロセス(状態がZ)に近い怪しいプロセスがあれば警告を出すような、現場で役立つ確認用スニペットです。
コンテナ名を指定
CONTAINER_NAME=”my-app-container”
コンテナ内のプロセスを一覧表示
echo “— 現在のコンテナプロセス一覧 —”
docker container top $CONTAINER_NAME
もし特定のプロセス(例: python)が多重起動していないか確認する場合
echo -e “\n— Pythonプロセスの確認 —”
docker container top $CONTAINER_NAME | grep python
ゾンビプロセスや高負荷プロセスの有無を簡易チェックする例
状態(STAT)列を抽出してチェックを行う
docker container top $CONTAINER_NAME -eo stat,args | awk ‘
{
# 状態がZ(ゾンビ)であれば警告を出す
if ($1 == “Z”) {
print “警告: ゾンビプロセスを検出しました: ” $0
}
}’
応用・注意点
現場で活用する際のポイントをいくつか挙げます。
1. 権限の壁:docker container topはDockerデーモン経由で情報を取得するため、Dockerコマンドを実行するユーザーに適切な権限(通常はdockerグループへの所属)が必要です。
2. PIDの差異:表示されるPIDは「コンテナ内部から見たPID」です。ホストOS側から見た実際のプロセスIDを知りたい場合は、docker inspectコマンドと組み合わせて確認する必要があります。
3. プロセスの生存確認:もしコンテナが「Up」状態なのにtopコマンドで何も表示されない場合は、コンテナ内のメインプロセス(PID 1)が既に停止しているか、ゾンビ化している可能性が高いです。その際はdocker logsでエラーを確認し、必要に応じてコンテナの再起動を検討してください。
このコマンドを使いこなすことで、トラブルシューティングの初動スピードは劇的に向上します。ぜひ日々の運用に取り入れてみてください。

コメント