目次

Docker logs 入門:コンテナログの確認方法(-f、--tail、--since)

docker logs はコンテナのメインプロセスの出力を表示します。デバッグの手順はログの確認とデバッグを参照してください。

構文

docker logs [オプション] コンテナ

オプション

オプション説明
-f, --follow新しいログを継続して表示します。Ctrl+Cで停止します
-n, --tail 数値末尾のn行だけを表示します(デフォルトは all)
-t, --timestamps各行の先頭にタイムスタンプを付けます
--since 時間指定した時間以降のログだけを表示します。例:10m、2h、2026-10-14T08:00:00
--until 時間指定した時間以前のログだけを表示します
--details追加の詳細情報(起動時に --log-opt で設定したラベルなど)を表示します

例

サンプルコンテナはstdoutに line N、stderrに error N を1秒ごとに5回出力します。

docker run -d --name logger alpine:3.23 sh -c 'for i in 1 2 3 4 5; do echo line $i; echo error $i >&2; sleep 1; done; sleep 600'

すべて表示、末尾の数行を表示、時刻を付ける

$ docker logs logger
line 1
error 1
line 2
error 2
line 3
error 3
error 4
line 4
error 5
line 5

$ docker logs --tail 2 logger
error 5
line 5

$ docker logs -t --tail 2 logger
2026-10-13T05:28:48.681587356Z error 5
2026-10-13T05:28:48.681659184Z line 5
  • オプションを付けない場合はすべて表示されます。stdoutとstderrは時刻順に交互に出力されます。
  • --tail 2 は末尾の2行だけを表示します。ログが多い場合は必ず指定してください。
  • -t はDockerが記録した時刻(UTC)を付けます。精度はナノ秒です。

直近のログ

$ docker logs --since 3s logger
error 4
line 4
error 5
line 5

--since 3s は直近3秒間のログだけを表示します。「たった今何が起きたか」を調べるときは、--tail より正確です。

stdoutとstderr

$ docker logs logger 2>/dev/null
line 1
line 2
line 3
line 4
line 5

$ docker logs logger 2>&1 | grep error
error 1
error 2
error 3
error 4
error 5
  • docker logs は、コンテナのstdoutとstderrを、あなたのターミナルのstdoutとstderrにそれぞれ送ります。
  • 2>/dev/null はstderrを破棄するため、line だけが残ります。
  • grep でエラーメッセージを検索するには、まず 2>&1 でstderrをstdoutに統合する必要があります。そうしないと、パイプにstdoutしか渡らず、何も見つかりません。

継続して追跡

$ timeout 3 docker logs -f --tail 1 logger
line 5

-f は新しいログが出るまで待ち続けます。--tail 1 と組み合わせると、末尾の1行を表示してから追跡を開始します。ここでは timeout 3 を使って3秒後に自動終了させています。通常はCtrl+Cで停止します。Composeで同じ操作をするには docker compose logs -f サービス名 を使います。

関連する章

練習問題

練習:logger コンテナの直近1分間のログから error を含む行を表示し、時刻も付けてください。

解答
docker logs -t --since 1m logger 2>&1 | grep error

よくある質問

docker logs の出力が何もありません。

docker logs が収集するのは、コンテナのメインプロセスが標準出力(stdout)と標準エラー(stderr)に書き込んだ内容だけです。プログラムがログをファイル(例:/var/log/app.log)に書き込む場合は、docker exec でそのファイルを読むか、プログラムが stdout に出力するよう変更してください。

Pythonプログラムのログが表示されるまで時間がかかります。

Pythonはターミナルがない場合、出力をバッファリングします。環境変数 PYTHONUNBUFFERED=1 を設定するとすぐに出力されます。[Pythonアプリ](/ja/docker/python/)を参照してください。

docker logs | grep で、あるはずのエラーメッセージが見つかりません。

エラーメッセージは通常 stderr に書き込まれますが、パイプ | が渡すのは stdout だけです。docker logs コンテナ 2>&1 | grep キーワード のようにしてください。

ログが大きくなり、ディスク容量を圧迫しています。

ログサイズの上限を設定してください(--log-opt max-size=10m --log-opt max-file=3)。実際の例は[ディスク容量のクリーンアップ](/ja/docker/cleanup/)を参照してください。

更新日 2026年10月14日