第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>
オプション(重要どころ)👇
-f / --follow:追いかける(リアルタイム) (Docker Documentation)--tail <行数>:最後のN行だけ (Docker Documentation)--since <時間/日時>:ここから後だけ (Docker Documentation)--until <時間/日時>:ここまでだけ (Docker Documentation)-t / --timestamps:タイムスタンプ付ける (Docker Documentation)
例👇
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 <サービス名>
主要オプション👇
-f / --follow:追いかける (Docker Documentation)--tail <行数>:最後のN行 (Docker Documentation)--since <時間/日時>:ここから後 (Docker Documentation)--no-log-prefix:api |みたいな接頭辞を消す (Docker Documentation)
例👇
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) ログの読み方:まずコレだけ守る🧭✨
ログを見ても「うわ〜いっぱい出てる〜😭」となりがちなので、読む順番を固定しよう💪
✅ 読む順番(テンプレ)
- 最後の50〜200行を見る(
--tail)👀 ERROR/Unhandled/Exception/ECONNREFUSEDみたいな 強い単語を探す🔎- エラー行の **直前(原因のログ)**も読む(だいたい直前に伏線がある)🧵
- 何回も繰り返してるなら「1周期だけ」切り出す(
--since/--until)🔁 - まだ分からないなら
-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分)🏃♂️💨
docker compose logs --tail 50 apiで「最後だけ見る」✅docker compose logs --since 5m --tail 200 apiで「直近だけ切り出す」✅docker compose logs -f apiで追いかけながら、APIを1回叩いてログを観察✅
できたら勝ち〜!🏆🎉
次章予告:第53章「終了コードと再起動ループの読み方」🔁😵
ログを見てると Exited (1) とか Restarting とか出てくるよね?
次はその “落ち方の意味” を読めるようにして、復旧が一気に速くなるよ💪😄