综合 Docker Engine 29 的两个新默认值:原地升级无感,重装机器会以为镜像没了

2026-10-02 21:01:28

Docker Engine 29 的两个新默认值:原地升级无感,重装机器会以为镜像没了

官方资料:Docker Engine v29 发布说明 · Docker Engine version 29 博客 · 运维记录原文:Docker 29 quietly changed two defaults

v29.0.0 于 2025-11-10 发布,官方把它定位成 foundational release:新特性不多,底层改动大。补丁版本当前已到 29.8.x。发布说明里明确写了,这个版本包含多项破坏性变更与弃用,升级前需要读完。

默认值一:containerd image store 成为全新安装的默认存储

containerd image store 取代旧的 overlay2 graph driver,成为全新安装的默认镜像/内容管理层。

关键限定是「全新安装」:已有安装原地升级时不会自动迁移,继续使用 overlay2 与原有镜像,什么都不会动。

真正会踩坑的是切换存储后端,或者从零重建机器。此时 daemon 会指向一个初始为空的新存储,既有容器与镜像看起来「消失」,需要重新 pull,或者跨存储做 save/load。它们没有丢,只是 daemon 换了个抽屉,切回 overlay2 就又出现了。

docker image load / save 新增 --platform 多平台选择:

docker image load --platform linux/amd64,linux/arm64 -i image.tar

legacy graph driver 已经弃用,官方计划在未来版本移除。

默认值二:nftables 防火墙后端(实验性)

给 docker 守护进程加 --firewall-backend=nftables 即可启用。官方规划是未来 nftables 成为默认、iptables 弃用。但实验阶段有几处行为差异:

  • 没有 DOCKER-USER 链。所有「把自定义规则加到 DOCKER-USER」的脚本和教程无处可挂。
  • 用于覆盖 Docker DROP 规则的 ACCEPT 规则失效。一条链里的 accept 不会终止另一条链的处理。
  • iptables FORWARD 链上遗留的 DROP 策略会静默黑洞掉包。Docker 的 nftables 规则已经接受,包却被 iptables 侧的 DROP 拦掉,两套子系统之间不协调。
  • Docker 不会自动开启主机 IP 转发。bridge 网络需要转发,主机未开启时,daemon 启动或网络创建会直接报错,需要手动开启;也可以用 --ip-forward=false 关掉这项检查,但端口转发等功能会一起失效。
  • 目前不支持 Swarm 节点启用。

破坏性变更与弃用

  • daemon 现在要求 API 版本 >= v1.44(Docker v25.0+)。用 pre-v25 客户端连接会报 Minimum supported API version 错误。
  • cgroup v1 弃用,支持延续到至少 2029-05,尽快迁到 cgroup v2。
  • Docker Content Trust 从 CLI 移除,可作为独立插件单独构建。
  • Go module 路径变更:github.com/docker/docker 弃用,改用 github.com/moby/moby/client 与 github.com/moby/moby/api;github.com/moby/moby 视为内部实现细节。自 v29 起发布 tag 带 docker- 前缀(如 docker-v29.0.0)。影响 Go module 使用者与包维护者。
  • 通过 legacy links 设置在容器上的环境变量弃用,不再自动添加。可用 DOCKER_KEEP_DEPRECATED_LEGACY_LINKS_ENV_VARS=1 临时找回,后续版本会移除。
  • Debian armhf(32 位)包现在面向 ARMv7,不再支持 ARMv6;官方不再提供 Raspbian(32 位)包,64 位设备请用 Debian arm64。
  • bridge 网络的 iptables 规则更新,移除 DOCKER-ISOLATION-STAGE-1/2 链。

安全加固

29.4.x 起为 CVE-2026-31431 加固:默认 seccomp profile 阻止 AF_ALG socket 与 socketcall(2) 复用器,防止容器内经内核 crypto API 提权("Copy Fail")。这项加固会破坏 32 位程序与 i386 镜像,包括 SteamCMD 和部分 Wine 工作负载。

29.8.x 起针对 CVE-2026-3143xx 系列持续加固,用定向 AppArmor/SELinux 规则在 LSM 层阻断 AF_ALG,覆盖 socket(2) 与 socketcall(2) 两条路径,并且不误伤合法的 32 位程序。SELinux 系统上需要 daemon 配置 selinux-enabled: true(默认关闭)。

一次单人运维的实测结论

环境:单台 VPS + Coolify + 少量容器。

结论是原地升级相对安全:不动镜像存储、不动防火墙后端,继续跑 overlay2 + iptables,可以放心吃安全补丁。但不要在有业务的活主机上启用 nftables,也不要在官方给出迁移指南前迁移镜像存储。

最容易踩的是「重装机器」:全新安装会默认落到 containerd 存储。要保留 registry 副本,并预期重新 pull。升级本身很无聊,重装才会给你惊喜。

复制全文 生成海报 Docker 容器 运维 nftables containerd

推荐文章

程序员茄子在线接单