目次
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 サービス名 を使います。
関連する章
- ログの確認とデバッグ
- docker compose コマンド:
docker compose logs - ディスク容量のクリーンアップ:ログサイズの上限
練習問題
練習: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日