Docker Engine v29 改了两个默认值:原地升级不动存储,重装才会踩坑
Docker Engine v29 于 2025-11-10 发布,官方定位是 "foundation release",没有花哨新功能,但动了两个默认值。这两个默认值决定了升级之后你的镜像还在不在、防火墙规则还挂不挂得上。
默认镜像存储:overlay2 → containerd image store
新装默认使用 containerd image store,取代 overlay2。
旧装不会自动迁移:原地升级继续用 overlay2,镜像都还在。但一旦切换存储(或者重装系统),daemon 会指向一个新的空存储,原来的容器与镜像"看起来消失"——需要重新 pull,或者用 save/load 迁移才能找回;切回 overlay2 它们又会出现。
配合这个存储模型,docker image load/save 新增了 --platform 参数。
新增实验性 nftables 防火墙后端
--firewall-backend=nftables
nftables 后端将来会成为默认,iptables 会弃用,但现在别在生产环境开。原因有三条:
- nftables 模式下没有
DOCKER-USER链,所有往DOCKER-USER加规则的脚本都没处挂; - 覆盖 Docker DROP 的 ACCEPT 规则失效;
- 残留的 iptables
FORWARD DROP策略会静默黑洞已经被 nftables ACCEPT 的包。
另外,Swarm 节点当前不支持 nftables。
其他变更
- 最低 API 版本从 1.43 提到 1.44(对应 Moby v25),旧客户端会报
Minimum supported API version错误。 - legacy graph driver 弃用。
- Go module 从
github.com/docker/docker迁到github.com/moby/moby/client与github.com/moby/moby/api。 data-root不再控制镜像存储位置。镜像层由 containerd 存,云主机上的 OS 盘容易被塞满。
附录:Docker Desktop CVE-2025-9074
CVE-2025-9074,CVSS 9.3,容器逃逸。Windows/macOS 私有网络 http://192.168.65.7:2375 暴露了未鉴权的 Docker API。升到 4.44.3+ 修复。
参考:
结论
原地升级相对安全——不动存储、也不动防火墙。会被默认值坑的是重装。