容器的日志存在哪里、什么格式、会不会无限增长?Docker Desktop 的默认日志驱动和常见文档里的 json-file 不一样。这篇逐项实测 local 和 json-file 的文件、格式、拆分与轮转。
docker info 的 Logging Driver = local
虚拟机里 daemon.json 的日志配置:"log-driver":"local","log-format":"json",
HostConfig.LogConfig = {"Type":"local","Config":{}};LogPath = ''(local 驱动没有 LogPath)
容器目录下的日志相关文件:local-logs/container.log
local 日志文件的前 48 个字节(十六进制):00 00 00 1c 0a 06 73 74 64 6f 75 74 10 b9 a8 ef bb 92 cf cb ee 18 1a 08 6c 69 6e 65 2d 6f 6e 65 00 00 00 1c 00 00 00 1c 0a 06 73 74 64 65 72 72(不是 JSON 文本)
docker logs 仍然能读:line-one ⏎ err-line很多文章说默认的日志文件是 <容器ID>-json.log,但在 Docker Desktop 里默认驱动是 local,日志在 local-logs/container.log,是二进制格式,docker logs 能正常读取。Linux 宿主机 Docker 的默认驱动是 json-file,这是我的了解,没有在 Linux 上验证。
LogPath = /var/lib/docker/containers/<容器ID>/<容器ID>-json.log
{"log":"line-one\n","stream":"stdout","time":"2026-10-10T13:35:27.306116551Z"}
{"log":"err-line\n","stream":"stderr","time":"2026-10-10T13:35:27.306182301Z"}
docker logs 的输出:line-one ⏎ err-line显式 --log-driver json-file 后,日志是每行一条 JSON:log(内容,带换行)、stream(stdout 或 stderr)、time。
输出 1 行 40000 个字符:日志文件里有 3 条记录;每条 log 字段的长度 [16384, 16384, 7233] docker logs 读出来是 1 行
一行 40000 个字符被拆成 3 条记录(16384、16384、7233),docker logs 读出来再拼成一行。
max-size=10k max-file=3,日志目录里的文件:6477 <ID>-json.log ; 10033 <ID>-json.log.1 ; 10033 <ID>-json.log.2 ; 3086 config.v2.json ; 1512 hostconfig.json 脚本一共输出 1000 行;docker logs 能读到 209 行,第一行是「line 791 pad」,最后一行是「line 999 pad」 对比:json-file 不设 --log-opt(默认没有上限)日志文件:126890 <ID>-json.log ; 3086 config.v2.json ; 1481 hostconfig.json;docker logs 读到 1000 行
json-file 默认不限制大小,一个只输出 1000 行的小脚本就有 126890 字节;设置 max-size 与 max-file 后轮转成 .1、.2 文件,docker logs 只能读到保留下来的部分(209 行)。local 驱动的默认轮转限制我没有测。
docker rm -f 之后容器目录还在吗?已删除
容器一删,日志目录就没了,要保留日志得用日志驱动转发到别处(见下一篇)。