技术博客

Docker Engine 29 运维升级重点:安全修复、containerd image store 与 cgroup v2

Docker Engine 29 带来多项安全修复和行为变化,本文从运维角度整理升级前需要关注的风险点和验证清单。

Docker Engine 29容器安全containerdcgroup v2

Docker Engine 29 是 2026 年运维团队需要重点关注的版本线之一。它不仅有常规 bug fix,也包含多项安全修复、默认行为变化和弃用项。

如果你在生产服务器上直接使用 Docker,或者在 CI/CD 构建机上运行 Docker daemon,升级前应该先看清楚变化点。

为什么 Docker Engine 升级不能只看“能不能启动容器”

很多人升级 Docker 的验证方式很简单:

docker run hello-world
docker ps

这只能证明 daemon 基本可用,不能证明生产场景安全。

更完整的验证应该覆盖:

Docker Engine 29 的一些变化正好集中在这些地方。

关注点一:29.6.x 包含多项安全修复

Docker 官方 release notes 显示,29.6.2 和 29.6.1 都包含安全修复,涉及 BuildKit、Git source checkout、本地源上传、Windows cache mount 等方向。

这提醒我们:CI/CD 构建机不是“内部机器就安全”。构建系统经常处理来自仓库、镜像、依赖包和构建上下文的输入,一旦构建工具链存在漏洞,攻击者可能通过构建过程扩大影响。

建议:

docker version
docker buildx version
docker info

确认 Engine、BuildKit、containerd 的实际版本,不要只看安装包名称。

关注点二:containerd image store 成为新安装默认项

Docker Engine 29 中,containerd image store 对新安装更重要。它代表 Docker 镜像管理继续向 containerd 生态靠拢。

升级前要验证:

常用检查:

docker image ls
docker system df
docker buildx ls

如果构建机磁盘很紧张,尤其要测试 docker system prune 和构建缓存清理。

关注点三:cgroup v1 已经进入长期迁移倒计时

Docker Engine 29 release notes 中明确提到 cgroup v1 已弃用,虽然支持会延续一段时间,但建议尽快迁移到 cgroup v2。

检查当前系统:

stat -fc %T /sys/fs/cgroup

如果输出是 cgroup2fs,说明是 cgroup v2。

如果仍然是 cgroup v1,要评估:

关注点四:Rootless 网络默认变化

Docker Engine 29.5 开始,rootless 模式中 gvisor-tap-vsock 成为新的默认 rootless 网络驱动,并建议优先于 slirp4netns

如果你在开发机、CI Runner 或受限服务器上使用 rootless Docker,要重点验证:

docker context ls
docker info | grep -i rootless

还要测试容器访问外网、端口映射、DNS 解析和私有仓库访问。

关注点五:docker cp 相关漏洞提醒我们少信任容器文件系统

Docker 29.5.1 修复过多个 docker cp 相关安全问题。这类问题的本质是:当宿主机 root 处理容器内路径、归档或符号链接时,边界判断非常关键。

运维建议:

示例:

mkdir -p /tmp/container-export
docker cp app:/data/report.tar /tmp/container-export/
tar -tf /tmp/container-export/report.tar

升级前的建议流程

  1. 在测试机安装目标版本。
  2. 跑现有镜像构建流程。
  3. 跑 Compose 或业务启动脚本。
  4. 检查端口映射和 DNS。
  5. 检查日志采集。
  6. 检查磁盘清理。
  7. 验证 rootless 或特权容器场景。
  8. 记录回滚版本和安装包来源。

总结

Docker Engine 29 的升级重点不只是“版本更新”,而是容器运行、构建、安全和系统 cgroup 方向的一次综合变化。

如果你正在学习 Linux 运维,建议把 Docker 升级当成一次真实演练:先读 release notes,再列风险清单,最后用命令验证。这样的训练,比单纯背 docker run 更接近生产环境。

参考资料