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

深夜3時、スマホが震えて「生産環境の決済サービスがダウン」の通知。
飛び起きて docker logs payment-service を叩いた瞬間——画面が何万行ものINFOログで埋め尽くされ、肝心のエラーが見つからない。絶望的な気分になったことはありませんか?
「ログを見る」なんて単純な作業に思えますが、Dockerにおいてログは「情報の濁流」になりがちです。何も考えずにコマンドを叩くと、大量のテキストに溺れて時間を浪費します。
この記事では、私が数々の障害対応(と徹夜)を経て身につけた、本当に使える docker logs の7つのテクニックを紹介します。これを知っているだけで、トラブルシューティングの速度は倍になります。
基礎編:ログの洪水を制御する
1. 直近のログだけを見る (--tail)
これが最も使うオプションです。何ヶ月も動いているコンテナの全ログを見る必要はありません。
# 最後(最新)の50行だけを表示
docker logs --tail 50 my-containerAPIの反応が遅い? エラーが出た? とりあえず 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
このファイルがログの実体です。ここに cat や less コマンドを直接使うこともできますが、JSON形式で保存されているため、人間には少し読みづらいかもしれません。
7. ログをファイルに書き出す
ログをチームメンバーに送ったり、テキストエディタでじっくり分析したい場合は、リダイレクトで保存します。
docker logs my-container > debug_log.txt 2>&1これで debug_log.txt に全てのログが保存されます。
生產環境のベストプラクティス
多くのコンテナを運用するようになったら、以下の点に注意してください。
1. ログローテーションを設定する(必須)
デフォルトではDockerログは無限に肥大化し、ディスクを食いつぶします。daemon.json で max-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
Step1: 基本:リアルタイム監視と直近表示
コマンド:docker logs -f --tail 100 <container>
解説:最も汎用性が高いコマンドです。過去の文脈(100行)を確認しつつ、現在の動作をリアルタイムで追跡できます。 - 2
Step2: フィルタ:時間指定で絞り込み
コマンド:docker logs --since 30m <container>
解説:トラブル発生時刻が分かっている場合、その時間帯のログだけを切り出します。1h(1時間)、2024-01-01T10:00:00(絶対時刻)などの指定が可能です。 - 3
Step3: 検索:エラーログの抽出
コマンド:docker logs <container> 2>&1 | grep -C 5 "ERROR"
解説:標準エラー出力も含めてgrepします。-C 5をつけることで、エラー行だけでなくその前後5行(文脈)も表示させます。
FAQ
grepで検索してもヒットしないことがあります。
ログに時間が表示されていません。
ログファイルの実体はどこにありますか?
2 min read · 公開日: 2025年12月18日 · 更新日: 2026年1月22日
関連記事
Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践

Next.js ファイルアップロード完全ガイド:S3/Qiniu Cloud 署名付き URL 直接アップロード実践
Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド

Next.js Eコマース実践:カートと Stripe 決済の完全実装ガイド
Next.js ユニットテスト実践:Jest + React Testing Library 完全設定ガイド


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