Skip to main content

第52章:ログ(logs)で“何が起きたか”を見る🪵

この章はズバリ、**「ログを読んで、次に何を確認すべきか決める力」**を身につける回だよ〜!💪😆 Dockerで詰まったとき、勘でいじると沼りがち…🥺 でもログを見れば一気に近道できる✨


1) まず知る:Dockerの「ログ」って何?🤔🧩

✅ Dockerが見せてくれるログ = コンテナの 標準出力/標準エラー(stdout/stderr)

つまり アプリが console.log() / console.error() で出した文字が基本! ファイルに書いたログ(例:/app/logs/app.log)は、docker logs では見えないことが多いよ⚠️(その場合は次章以降の「exec」で中に入って見る系になる)

docker logs のコマンド仕様・オプションは公式のCLIリファレンスをベースにしよう👍 (Docker Documentation) docker compose logs も同じく公式にオプションがまとまってるよ! (Docker Documentation)


2) まずは最短の「ログ3点セット」🎯🧰

ここだけ覚えれば戦える🔥(あとで増やす)

A. 単体コンテナのログ(基本)

docker logs <コンテナ名 or ID>

オプション(重要どころ)👇

例👇

docker logs --tail 80 <コンテナ名>
docker logs -f <コンテナ名>
docker logs --since 10m --tail 200 <コンテナ名>
docker logs --since 2026-02-09T10:00:00+09:00 -t <コンテナ名>

--since は「RFC3339の日付」「UNIXタイム」「10m みたいな相対時間」OK。タイムゾーン省略時の扱いも含めて仕様があるので、困ったらここを見ると強い💡 (docs.docker.jp)


B. Composeのログ(Todo APIみたいな複数サービス向け)

docker compose logs
docker compose logs <サービス名>

主要オプション👇

例👇

docker compose logs --tail 120 api
docker compose logs -f api
docker compose logs --since 5m --tail 200 api db
docker compose logs --no-log-prefix --tail 200 api

C. 「いま動いてる?」の確認(ログの前にやると速い)🏎️

docker ps
docker ps -a
  • docker ps:稼働中だけ
  • docker ps -a:落ちたコンテナも含めて見る(落ちた原因はログに出てること多い!)

3) ログの読み方:まずコレだけ守る🧭✨

ログを見ても「うわ〜いっぱい出てる〜😭」となりがちなので、読む順番を固定しよう💪

✅ 読む順番(テンプレ)

  1. 最後の50〜200行を見る(--tail)👀
  2. ERROR / Unhandled / Exception / ECONNREFUSED みたいな 強い単語を探す🔎
  3. エラー行の **直前(原因のログ)**も読む(だいたい直前に伏線がある)🧵
  4. 何回も繰り返してるなら「1周期だけ」切り出す(--since / --until)🔁
  5. まだ分からないなら -f で追いかけて「いつ壊れるか」を観察🧪

4) ハンズオン:ログで“原因箇所”を特定する🛠️🔥

Todo API(api サービス)を想定して、わざと事故らせるよ😈(学習のため!)

🎬 0. 状態を作る(起動)

docker compose up -d
docker compose ps

まずはログ軽くチェック👇

docker compose logs --tail 80 api

🧨 ケース1:起動直後に落ちる(例外で死ぬ)💥

たとえば「起動時に必須の環境変数が無い」とか、「DB接続初期化で例外」とかで落ちるやつ。

① 落ちたことを確認

docker ps -a

Exited とか Restarting っぽいのが見えたら、すぐログ!

② ログの最後を掴む

docker compose logs --tail 200 api

ここで見るポイント👀✨

  • スタックトレース(行番号)src/...:123:45 みたいなの
  • 「どの設定が無い?」ENV xxx is required 的なメッセージ
  • Nodeの例外名TypeError / ReferenceError など

③ 直近だけに絞ってノイズ除去

docker compose logs --since 5m --tail 200 api

--since/--tail の考え方は公式にまとまってる👍 (Docker Documentation)


🚪 ケース2:APIは動いてるのに、アクセスすると500になる😵

これは「リクエスト時に落ちる」パターン。ログ追跡が強い💪

① 追いかけモードにする

docker compose logs -f api

別ターミナルで、API叩いてみる(例)👇

curl http://localhost:3000/health

するとログに、どのルートで何が起きたかが出るはず🪵✨

🧠 コツ:ログに「どのAPIが呼ばれたか」を1行で出すと世界が変わる 例(アプリ側):console.log("[REQ] GET /todos") みたいなやつ👍


🔌 ケース3:DBに繋がらない(複数サービスのログを並べて見る)🧩

APIだけ見てても分からないやつ!Composeの出番😆

① api と db を同時に見る

docker compose logs --tail 200 api db

② “直近だけ”に絞る(超重要)

docker compose logs --since 10m --tail 200 api db

ECONNREFUSED とか password authentication failed とか、だいたい何か言ってる😇


5) Windowsでの「ログ検索」ちょいテク🔎🪟✨

Composeログは標準出力に出るので、フィルタリングがやりやすい👍(正規表現検索は標準機能ではなく、パイプで外部ツールに渡す発想)(dash0.com)

WSL(Linux)なら:grep

docker compose logs --since 30m api db | grep -i "error"

PowerShellなら:Select-String

docker compose logs --since 30m api db | Select-String -Pattern "error"

6) AI活用:ログを貼るときの“勝ちテンプレ”🤖✨

AIに投げるときは、「欲しい出力」を先に指定すると精度が上がるよ👍

テンプレ1:原因候補トップ3 + 確認コマンド

以下は docker compose logs の抜粋です。
(ログ貼る)

質問:
1) 原因候補を重要度順に3つ
2) 各候補を確認するためのコマンド(docker/compose中心)を具体的に
3) 最短で直すならどこを直すべきか(設定/コード/Composeどれ?)

テンプレ2:再現条件の切り分け

以下のログは「起動直後はOKだが、リクエスト時に500になる」状況です。
(ログ貼る)

質問:
・エラーが起きるタイミング(起動時/リクエスト時/DB接続時)を分類
・次に見るべきログの取り方(--since/--tail/-fの組み合わせ)を提案して

7) つまずきがちな罠まとめ(ここだけ注意)⚠️😵‍💫

罠1:ログが何も出ない

  • アプリがstdoutに出してない(ファイルに書いてる)
  • すぐ落ちてるのに「稼働中のコンテナ」だけ見てた(docker ps -a を見る)

罠2:--since の日時で混乱する

  • --since はRFC3339など複数形式OK。タイムゾーン指定の有無で見え方が変わることがあるので、困ったら --since 10m が楽😄 (docs.docker.jp)

罠3:Docker自体が壊れてて logs 以前の問題

たとえば Cannot connect to the Docker daemon... 系。 その場合は Docker Desktop のWSL連携設定が原因のこともあるよ🪟 (Docker Community Forums) どうしてもダメなら Docker Desktop の内部ログ(backend/diagnose/build)を見る手もある(最終手段)🧯 (Qiita)


8) ミニ課題(5分)🏃‍♂️💨

  1. docker compose logs --tail 50 api で「最後だけ見る」✅
  2. docker compose logs --since 5m --tail 200 api で「直近だけ切り出す」✅
  3. docker compose logs -f api で追いかけながら、APIを1回叩いてログを観察✅

できたら勝ち〜!🏆🎉


次章予告:第53章「終了コードと再起動ループの読み方」🔁😵

ログを見てると Exited (1) とか Restarting とか出てくるよね? 次はその “落ち方の意味” を読めるようにして、復旧が一気に速くなるよ💪😄