Docker Desktop 不提供图形界面配置日志大小的功能,必须通过 docker run --log-driver json-file --log-opt max-size=20m --log-opt max-file=3(单容器)或 Docker Desktop 设置中修改 Docker Engine 配置(全局)来生效,且仅对新创建容器有效。

直接说结论:Docker Desktop 本身不提供图形界面配置容器日志大小的功能,它完全复用底层 Docker Engine 的机制,所以必须通过 docker run 参数或修改 /etc/docker/daemon.json 来生效——而且后者在 Docker Desktop(macOS / Windows)上路径和操作方式完全不同。
docker run 时加 --log-opt 是最可靠的方式
这是唯一能对单个容器精准控制日志大小的方法,且在 Docker Desktop 上 100% 有效,不受平台限制。
-
--log-driver json-file必须显式指定,因为虽然它是默认驱动,但部分 Docker Desktop 版本在未声明时会忽略--log-opt -
--log-opt max-size=10m:建议设为10m~100m,太小会导致频繁轮转、影响 I/O;太大则起不到保护磁盘的作用 -
--log-opt max-file=3:设为3比较稳妥,1容易丢日志,5+在多容器场景下容易累积冗余 - 示例命令:
docker run -d --name myapp --log-driver json-file --log-opt max-size=20m --log-opt max-file=3 nginx:alpine - 注意:该配置只对本次启动的容器生效,
docker-compose up需在logging字段里等价配置
Docker Desktop for macOS / Windows 不能直接改 /etc/docker/daemon.json
你在终端里看到的 /etc/docker/daemon.json 是宿主机路径,而 Docker Desktop 的 daemon 运行在轻量级 Linux VM(Hyper-V 或 HyperKit)里,它不挂载该文件,改了也无效。
- macOS 上真实 daemon 配置位于虚拟机内部,无法直接编辑;Windows 同理(WSL2 backend 下配置文件在 WSL 实例中,但 Docker Desktop 不读取它)
- 强行在宿主机创建
/etc/docker/daemon.json并重启 Docker Desktop,不会触发 reload,配置被静默忽略 - 正确做法:打开 Docker Desktop → ⚙️ Settings → Docker Engine,把 JSON 配置粘贴进去,点 Apply & Restart —— 这才是真正写入 VM 内 daemon 的唯一途径
- 示例配置内容(必须是合法 JSON):
{ "log-driver": "json-file", "log-opts": { "max-size": "50m", "max-file": "3" } }
docker-compose.yml 中的 logging 配置最容易漏掉 driver
很多人写了 options 却没写 driver,结果日志限制完全不生效,因为 Compose 默认不继承 daemon 全局设置,也不默认 fallback 到 json-file。
- 必须同时声明:
driver: "json-file"和options,缺一不可 - 正确写法示例:
services: api: image: myapp:latest logging: driver: "json-file" options: max-size: "30m" max-file: "3" - 错误写法(无效果):
logging: { options: { max-size: "30m" } }—— 缺少driver,Compose 会用默认行为(可能无限制) - 验证是否生效:
docker inspect,看输出里| jq '.HostConfig.LogConfig' Options是否包含你设的值
最关键的细节是:所有配置只对新创建的容器生效。正在运行的容器不会自动加载新日志策略,哪怕你改了 daemon 配置并重启 Docker Desktop,也得 docker restart 或重建容器才能让日志限制起作用。这点在排障时最容易被跳过。











