Docker Engine 29 版本发布说明

本文档介绍 Docker Engine 29 版本的最新变更、新增功能、已知问题和修复内容。

如需了解更多信息,请参阅:

29.1.3

2025-12-12

有关此版本中拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:

错误修复和增强功能

  • docker stack deploy --compose-file 添加 shell 补全功能。docker/cli#6690
  • containerd 镜像存储:修复导致 docker build 忽略显式设置的 unpack 镜像导出器选项的错误。moby/moby#51514
  • 修复 docker image ls 对悬空镜像的处理。docker/cli#6704
  • 修复一个错误,该错误可能导致 Engine 在关闭时留下设置了自动删除的容器处于“dead”状态,且永远不会回收它们。moby/moby#51693
  • 修复在 i386 上的构建问题。moby/moby#51528
  • 修复显式图驱动配置("storage-driver")在先前图驱动状态存在时被当作 containerd snapshotter 处理的问题。moby/moby#51516
  • 修复可能导致创建孤立 overlay2 层的问题。moby/moby#51703

网络

  • 允许在容器网络未配置特定子网的情况下创建具有特定 IP 地址的容器。moby/moby#51583
  • 在启动通过 API 创建且在升级到 v29.1.2 之前创建的容器时,如果设置了 PublishAllPortBindings 映射为 nil,则不会崩溃。moby/moby#51691
  • 修复一个错误,该错误阻止了节点加入 Swarm 集群后,连接到非 Swarm 范围网络的容器的 DNS 解析。moby/moby#51515
  • 修复使用远程网络驱动插件时导致守护进程崩溃的问题。moby/moby#51558
  • 修复一个问题,该问题可能导致在创建具有多个网络连接的容器时出现“endpoint not found”错误,当其中一个网络是非内部网络但没有自己的外部 IP 连接性时。moby/moby#51538
  • 修复在禁用 IPv6 的主机上无法启动 rootless Docker 的问题。moby/moby#51543
  • 当使用指向容器端口 0 的端口映射创建容器时返回错误。moby/moby#51695

29.1.2

2025-12-02

有关此版本中拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:

安全性

错误修复和增强功能

  • containerd 镜像存储:修复 docker image inspect 在并非所有可分发 blob 都在本地可用时无法返回可用镜像数据的问题。moby/moby#51629
  • dockerd-rootless-setuptool.sh:修复 nsenter: no namespace specifiedmoby/moby#51622
  • 修复 docker system df 在使用图驱动作为存储时显示共享大小和唯一大小为 N/A 的问题。moby/moby#51631

打包更新

网络

  • 修复在 rootless 模式下使用 slirp4netns 时阻止端口映射的错误。moby/moby#51616
  • 防止在进行设置了 HostConfig.PublishAllPorts-P)且没有端口绑定的 API 请求时崩溃。moby/moby#51621

29.1.1

2025-11-28

有关此版本中拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:

网络

  • 还原一个破坏所有自定义桥接网络外部 DNS 解析的 PR。moby/moby#51615

29.1.0

2025-11-27

有关此版本中拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:

打包更新

网络

  • 不要在容器重启时覆盖用户修改的 /etc/resolv.confmoby/moby#51507
  • 修复 Windows 容器的 --publish-all / -Pmoby/moby#51586
  • 修复在容器停止或网络断开期间网关配置失败时阻止容器重启或网络重新连接的问题。moby/moby#51592
  • Windows 容器:不在端口映射中显示 IPv6 映射的 IPv4 地址。例如,[::ffff:0.0.0.0]:8080->80/tcp 而不是 0.0.0.0:8080->80/tcpmoby/moby#51587

29.0.4

2025-11-24

有关此版本中拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:

错误修复和增强功能

网络

  • 允许在容器网络未配置特定子网的情况下创建具有特定 IP 地址的容器。moby/moby#51583

29.0.3

2025-11-24

有关此版本中拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:

错误修复和增强功能

  • docker version --format json:恢复顶级 BuildTime 字段使用 RFC3339Nano 格式。docker/cli#6668
  • 修复 docker image ls 忽略 docker.json 中自定义 imageFormat 的问题。docker/cli#6667

网络

  • 修复使用远程网络驱动插件时导致守护进程崩溃的问题。moby/moby#51558

29.0.2

2025-11-17

有关此版本中拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:

网络

  • 修复一个问题,该问题可能导致在创建具有多个网络连接的容器时出现“endpoint not found”错误,当其中一个网络是非内部网络但没有自己的外部 IP 连接性时。moby/moby#51538
  • 修复在禁用 IPv6 的主机上无法启动 rootless Docker 的问题。moby/moby#51543

29.0.1

2025-11-14

有关此版本中拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:

错误修复和增强功能

  • docker image ls 在输出被重定向时(例如用于 grep)不再截断名称宽度。docker/cli#6656
  • docker image ls 现在考虑 NO_COLOR 环境变量来选择彩色输出。docker/cli#6654
  • containerd 镜像存储:修复导致 docker build 忽略显式设置的 unpack 镜像导出器选项的错误。moby/moby#51514
  • 修复导致 docker image ls --all 不显示未标记/悬空镜像的错误。docker/cli#6657
  • 修复在 i386 上的构建问题。moby/moby#51528
  • 修复显式图驱动配置("storage-driver")在先前图驱动状态存在时被当作 containerd snapshotter 处理的问题。moby/moby#51516
  • 修复 docker version --format=jsonApiVersionMinApiVersion 字段的输出格式,使其与以前的版本保持一致。docker/cli#6648

网络

  • 修复一个错误,该错误阻止了节点加入 Swarm 集群后,连接到非 Swarm 范围网络的容器的 DNS 解析。moby/moby#51515

29.0.0

2025-11-10

有关此版本中拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:

Caution

此版本包含多项重大变更和弃用。在升级前请仔细查看发布说明。

  • 现在可以通过将 Docker 守护进程的 firewall-backend 选项设置为 nftables 来启用对 nftables 的实验性支持。有关更多信息,请参阅 Docker Engine 文档
  • containerd 镜像存储现在默认为全新安装。这不适用于配置了 userns-remap 的守护进程(请参阅 moby#47377)。

重大变更

  • Go 模块 github.com/docker/docker 已被弃用,推荐使用 github.com/moby/moby/clientgithub.com/moby/moby/apigithub.com/moby/moby 模块被视为内部实现细节 - 唯一受支持的公共模块是 clientapi。 从 v29 开始,发布版本将使用 docker- 前缀进行标记(例如,docker-v29.0.0)。这仅影响 Go 模块用户和软件包维护者。
  • 守护进程现在需要 API 版本 v1.44 或更高版本(Docker v25.0+)。
  • Debian armhf(32 位)软件包现在针对 ARMv7 CPU,无法在 ARMv6 设备上运行。
  • 不再提供官方的 Raspbian(32 位)软件包。64 位设备请使用 Debian arm64 软件包,32 位 ARMv7 设备请使用 Debian armhf 软件包。
  • cgroup v1 已被弃用。 支持将持续到至少 2029 年 5 月,但请尽快迁移到 cgroup v2。请参阅 moby#51111
  • Docker Content Trust 已从 Docker CLI 中移除。可以构建为单独的插件:https://github.com/docker/cli/blob/v29.0.0/cmd/docker-trust/main.go

新增功能

  • docker image loaddocker image save 现在支持通过 --platform 标志选择多个平台(例如,docker image load --platform linux/amd64,linux/arm64 -i image.tar)。docker/cli#6126
  • docker image ls 现在默认使用新视图(类似于 --tree 但已折叠)。docker/cli#6566
  • docker run --runtime <...> 现在在 Windows 上受支持。moby/moby#50546
  • GET /containers/json 现在包含一个 Health 字段,描述容器健康检查状态。moby/moby#50281
  • 在构建器配置中添加 device 权限。moby/moby#50386
  • docker service createdocker service update 命令添加对 memory-swapmemory-swappiness 标志的支持。docker/cli#6619
  • 允许 Docker CLI 在键值对("GODEBUG":"...")存在于 Docker 上下文元数据中时设置 GODEBUG 环境变量。docker/cli#6371

错误修复和增强功能

  • docker image ls --tree 现在按名称对镜像进行字母排序,而不是按创建日期。docker/cli#6595
  • docker image ls 默认不再显示未标记的镜像,除非提供了 --all 标志。docker/cli#6574
  • docker save:修复使用 overlay2 存储驱动导出镜像时 tar 成员时间戳不一致的问题。moby/moby#51365
  • 为 fluentd 日志驱动添加一个新的日志选项(fluentd-read-timeout),允许指定从 fluentd 连接读取确认的读取超时。moby/moby#50249
  • docker images 添加镜像名称补全。docker/cli#6452
  • 如果设置了 --type,则为 docker inspect 添加 shell 补全。docker/cli#6444
  • docker plugin 子命令添加 shell 补全。docker/cli#6445
  • api/types/container:使 ContainerState、HealthStatus 成为具体类型。moby/moby#51439
  • 当启用 userns 重映射时,containerd 镜像存储暂时不可用,作为 moby#47377 的解决方法。moby/moby#51042
  • contrib:移除仅用于集成测试的 contrib/httpserver。moby/moby#50654
  • 守护进程:改进对 --dns 选项和 daemon.json 中相应 "dns" 字段的验证。moby/moby#50600
  • dockerd-rootless.sh:如果未安装 slirp4netns,请尝试使用 pasta (passt)。moby/moby#51149
  • 修复将同一镜像多次挂载到不同目标时 --mount type=image 失败的问题。moby/moby#50268
  • 修复 docker stats <container> 无法正常退出的问题。docker/cli#6582
  • 修复一个错误,该错误阻止 API 服务器在打开到 /events 端点的连接时快速关闭。moby/moby#51448
  • 修复在“一次性”模式下收集容器统计信息时不包括容器 ID 和名称的错误。moby/moby#51302
  • 修复在扩大具有放置偏好的服务后,Swarm 中所有新任务可能永远卡在 PENDING 状态的问题。moby/moby#50202
  • 修复使用 containerd 镜像存储时自定义元头未传递的问题。moby/moby#51024
  • 修复使用 --log-level=trace 运行守护进程时请求未被记录的问题。moby/moby#50986
  • 修复 firewalld 重新加载后 Swarm 服务从已发布端口无法访问的问题。moby/moby#50443
  • 改进连接到 API 失败时的错误信息,为用户提供更多上下文。moby/moby#50285
  • 改进 docker secretdocker config 子命令的 shell 补全。docker/cli#6446
  • 在选择设备驱动时,优先使用显式设备驱动名称而不是 GPU 功能。moby/moby#50717
  • 将 runc 更新到 v1.3.3moby/moby#51393
  • 更新 SwarmKit 内部 TLS 配置以排除已知的不安全密码套件。moby/moby#51139
  • Windows:修复 BuildKit 创建与守护进程配置隔离模式不一致的容器的问题。moby/moby#50942

打包更新

  • 客户端:从客户端配置中移除传统的 CBC 密码套件。moby/moby#50126

  • contrib:移除无人维护的 editorconfigmoby/moby#50607

  • contrib:移除 nano 和 TextMate (tmbundle) 的 Dockerfile 语法高亮文件,因为它们无人维护且已过时。moby/moby#50606

  • contrib:移除 mkimage-xxx 脚本,因为它们无人维护且未经测试。moby/moby#50297

  • 如果 Docker 降级到没有此支持的版本,网络将变得不可用,必须删除并重新创建。moby/moby#50114

  • Windows overlay 网络驱动现在支持 --dns 选项。moby/moby#51229

  • 将 BuildKit 更新到 v0.25.2moby/moby#51397

  • 将 containerd 更新到 v2.1.5moby/moby#51409

    containerd v2.1.5 现在使用 systemd 的默认 LimitNOFILE 来处理容器, 将打开文件描述符限制 (ulimit -n) 从 1048576 更改为 1024。这扩展了 Docker Engine v25.0 为构建容器引入的变更,使其适用于所有容器。

    这可以防止根据 ulimit 调整行为的程序在限制设置为 infinity 时消耗过多内存。容器现在与主机上运行的程序行为一致。

    如果工作负载需要更高的限制,请使用 docker run--ulimit,或在 /etc/docker/daemon.json 中设置默认值:

    {
      "default-ulimits": {
        "nofile": {
          "Name": "nofile",
          "Soft": 1048576,
          "Hard": 1048576
        }
      }
    }

    有关更多信息,请参阅 moby#51485

  • 将 Go 运行时更新到 1.25.4moby/moby#51418docker/cli#6632

  • 用户可以通过使用未指定地址来请求从默认池分配的网络的特定前缀大小,例如 --subnet 0.0.0.0/24 --subnet ::/96moby/moby#50114

网络

  • 添加守护进程选项 --bridge-accept-fwmark。具有此防火墙标记的数据包将被桥接网络接受,覆盖 Docker 的 iptables 或 nftables “drop” 规则。moby/moby#50476
  • api/types/system:弃用 DiskUsage 的顶级字段,改用特定类型的字段。moby/moby#51235
  • 确保在桥接网络创建失败时移除桥接设备。moby/moby#51147
  • 确保 Engine 重启时 Windows NAT 网络以其原始标签重新创建。moby/moby#50447
  • 使用传统链接在容器上设置的环境变量已被弃用,不再自动添加。moby/moby#50719
    • 可以使用 DOCKER_KEEP_DEPRECATED_LEGACY_LINKS_ENV_VARS=1 启动守护进程以恢复它们
    • 鼓励用户停止使用这些变量,因为它们已被弃用,且逃生舱口将在以后的版本中移除
  • 修复 NetworkDB 中的一个错误,该错误有时会导致条目在某些节点上卡住删除,导致 overlay 网络上容器之间的连接问题。moby/moby#50342
  • 修复一个可能导致 Engine 和另一个主机进程绑定到相同 UDP 端口的错误。moby/moby#50669
  • 修复在桥接网络驱动启动、创建或删除网络或创建端口映射时处理 firewalld 重新加载可能发生的死锁。moby/moby#50620
  • 修复在特定接口上仅禁用 IPv6 时阻止容器启动或选择其网络网关的问题。moby/moby#48971
  • 对于 Linux,docker info 现在报告可用的防火墙后端。docker/cli#6191
  • 大大提高 overlay 网络和 Swarm 路由网格的可靠性。moby/moby#50393
  • 提高 NetworkDB(overlay 网络管理平面的一部分)在更新突发后的收敛速率。moby/moby#50193
  • 提高 overlay 网络驱动的可靠性。moby/moby#50260
  • 改进容器连接到网络的错误处理。moby/moby#50945
  • macvlan 和 IPvlan-l2 网络:除非在 IPAM 配置中明确包含 --gateway,否则不会配置默认网关。这解决了在启用 IPv6 自动配置的网络中可能导致容器启动失败的问题。moby/moby#50929
  • nftables:Docker 不会在主机上启用 IP 转发。如果桥接网络需要转发但未启用,守护进程启动或网络创建将失败并显示错误。您必须启用转发并确保防火墙规则到位以防止非 Docker 接口之间的意外转发。或者,使用守护进程选项 --ip-forward=false 禁用检查,但某些桥接网络功能(包括端口转发)可能无法工作。有关从 iptables 迁移到 nftables 的更多信息,请参阅 Engine 文档moby/moby#50646
  • 在守护进程启动时,先重启共享其网络栈的容器,再重启需要这些栈的容器。moby/moby#50327
  • 在网关模式为“routed”的网络中,已发布的端口现在始终可访问。以前,仅当路由模式网络被选为容器的默认网关时,才会添加打开这些端口的规则。moby/moby#50140
  • 自 28.0.0 起,仅当环境变量 DOCKER_IPTABLES_SCTP_CHECKSUM=1 设置时,才会添加用于 SCTP 校验和的 iptables mangle 规则。该规则现在已被移除,环境变量现在无效。moby/moby#50539
  • 桥接网络的 iptables 规则已更新,包括移除 DOCKER-ISOLATION-STAGE-1DOCKER-ISOLATION-STAGE-2 链。通过这些更改:moby/moby#49981
    • 当用户空间代理未运行时,容器现在可以访问其他网络中容器发布到主机地址的端口
    • 容器现在可以访问其他网络中网关模式为“nat-unprotected”的容器地址上的端口
  • 当动态链接时