言語を切り替える
テーマを切り替える

Docker logsコマンド完全攻略:プロが教える7つの実戦テクニック

深夜3時、スマホが震えて「生産環境の決済サービスがダウン」の通知。
飛び起きて docker logs payment-service を叩いた瞬間——画面が何万行ものINFOログで埋め尽くされ、肝心のエラーが見つからない。絶望的な気分になったことはありませんか?

「ログを見る」なんて単純な作業に思えますが、Dockerにおいてログは「情報の濁流」になりがちです。何も考えずにコマンドを叩くと、大量のテキストに溺れて時間を浪費します。

この記事では、私が数々の障害対応(と徹夜)を経て身につけた、本当に使える docker logs の7つのテクニックを紹介します。これを知っているだけで、トラブルシューティングの速度は倍になります。

基礎編:ログの洪水を制御する

1. 直近のログだけを見る (--tail)

これが最も使うオプションです。何ヶ月も動いているコンテナの全ログを見る必要はありません。

# 最後(最新)の50行だけを表示
docker logs --tail 50 my-container

APIの反応が遅い? エラーが出た? とりあえず tail 100 くらいで見れば、直近の出来事が分かります。全ログを表示させてターミナルがフリーズする悲劇も防げます。

2. リアルタイムで監視する (-f)

Linuxの tail -f と同じです。コンテナが現在進行系で何を吐き出しているかを見ます。

docker logs -f my-container

最強の組み合わせ:

# 直近100行を表示してから、リアルタイム監視モードに入る
docker logs -f --tail 100 my-container

私はコンテナをデバッグする時、手癖でこのコマンドを叩きます。過去の文脈を把握しつつ、自分の操作(リクエスト)に対する反応をリアルタイムで見れるからです。

検索・フィルタリング編:砂漠から針を探す

3. 時間範囲で絞り込む (--since, --until)

「昨夜の3時から4時の間にエラーが出ていたらしい」という曖昧な報告を受けた時に役立ちます。

# 過去1時間のログだけ見る
docker logs --since 1h my-container

# 指定した日時以降のログを見る
docker logs --since "2025-12-18T03:00:00" my-container

# 特定の時間帯(1時間分)を切り出す
docker logs --since "2025-12-18T03:00:00" --until "2025-12-18T04:00:00" my-container

大量のログファイルから特定の時間帯を手動でスクロールして探すのは、今すぐやめましょう。

4. タイムスタンプを表示する (-t)

ログ自体に時刻情報が含まれていない場合、いつのエラーか分かりません。Dockerに時刻を付けさせましょう。

docker logs -t my-container

出力:
2025-12-18T10:00:05.123Z [ERROR] Database timeout

これで、監視システムのアラート時刻とログを正確に突き合わせることができます。

5. grepでエラーだけを抜き出す

これはDockerの機能ではなくLinuxの機能ですが、必須テクニックです。

docker logs my-container 2>&1 | grep "ERROR"

注意点:2>&1 が超重要です!
Dockerのログは「標準出力 (stdout)」と「標準エラー出力 (stderr)」に分かれています。アプリによってはエラーログを stderr に吐くため、単なるパイプ | では grep できないことがあります。2>&1 で両方を合流させることで、漏れなく検索できます。

前後も見る:

# ERRORという文字を含む行と、その前後10行を表示
docker logs my-container 2>&1 | grep -C 10 "ERROR"

エラーの文脈(スタックトレースや直前のリクエスト情報)を知るには -C (Context) オプションが不可欠です。

上級編:ファイルの裏側を知る

6. ログファイルの実体を探す

docker logs コマンドが重すぎて動かない時や、ログファイルを直接バックアップしたい時に使います。

docker inspect --format='{{.LogPath}}' my-container

出力例:
/var/lib/docker/containers/abc123.../abc123...-json.log

このファイルがログの実体です。ここに catless コマンドを直接使うこともできますが、JSON形式で保存されているため、人間には少し読みづらいかもしれません。

7. ログをファイルに書き出す

ログをチームメンバーに送ったり、テキストエディタでじっくり分析したい場合は、リダイレクトで保存します。

docker logs my-container > debug_log.txt 2>&1

これで debug_log.txt に全てのログが保存されます。

生產環境のベストプラクティス

多くのコンテナを運用するようになったら、以下の点に注意してください。

1. ログローテーションを設定する(必須)
デフォルトではDockerログは無限に肥大化し、ディスクを食いつぶします。daemon.jsonmax-size を設定してください(別記事で詳しく解説しています)。

2. 集中ログ管理システムを使う
コンテナが10個を超えたら、個別に docker logs を叩くのは限界です。Elasticsearch (ELK), Loki, Fluentd などのログ収集基盤を導入し、ブラウザから全コンテナのログを検索できるようにしましょう。

まとめ

docker logs は単なる表示コマンドではありません。オプションを使いこなせば、強力なデバッグツールになります。

今日から使えるチートシート:

  • とりあえず状況確認docker logs -f --tail 100 <name>
  • 昨日のエラー調査docker logs --since 24h <name> 2>&1 | grep "ERROR"
  • 時間合わせdocker logs -t <name>

深夜の障害対応で焦らないよう、これらのコマンドを指に覚え込ませておきましょう。

Docker logsマスターガイド

コンテナログを効率的に調査・監視するための7つのコマンドテクニック

⏱️ Estimated time: 10 min

  1. 1

    Step1: 基本:リアルタイム監視と直近表示

    コマンド:docker logs -f --tail 100 <container>
    解説:最も汎用性が高いコマンドです。過去の文脈(100行)を確認しつつ、現在の動作をリアルタイムで追跡できます。
  2. 2

    Step2: フィルタ:時間指定で絞り込み

    コマンド:docker logs --since 30m <container>
    解説:トラブル発生時刻が分かっている場合、その時間帯のログだけを切り出します。1h(1時間)、2024-01-01T10:00:00(絶対時刻)などの指定が可能です。
  3. 3

    Step3: 検索:エラーログの抽出

    コマンド:docker logs <container> 2>&1 | grep -C 5 "ERROR"
    解説:標準エラー出力も含めてgrepします。-C 5をつけることで、エラー行だけでなくその前後5行(文脈)も表示させます。

FAQ

grepで検索してもヒットしないことがあります。
アプリがログを標準出力(stdout)ではなく標準エラー出力(stderr)に出している可能性があります。`docker logs <name> 2>&1 | grep ...` のように `2>&1` を追加して、stderrをstdoutにマージしてから検索してください。
ログに時間が表示されていません。
アプリ自体がログにタイムスタンプを含めていない場合、`-t` または `--timestamps` オプションを付けて実行してください。Dockerがログを受信した時刻を行頭に付与して表示します。
ログファイルの実体はどこにありますか?
通常は `/var/lib/docker/containers/<ID>/<ID>-json.log` にあります。`docker inspect --format='{{.LogPath}}' <name>` コマンドで正確なパスを確認できます。

2 min read · 公開日: 2025年12月18日 · 更新日: 2026年1月22日

コメント

GitHubアカウントでログインしてコメントできます

関連記事