Docker Engine 版本 28 发行说明

此页面描述了 Docker Engine 版本 28 的最新更改、新增功能、已知问题和修复。

有关更多信息,请参阅

28.1.1

2025-04-18

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

错误修复和增强功能

  • 修复 dockerd-rootless-setuptool.sh 错误报告缺失 iptables 的问题。moby/moby#49833
  • containerd 镜像存储:修复使用 docker load 加载包含零大小 tar 头部的归档文件时可能导致守护进程崩溃的问题。moby/moby#49837

打包更新

网络

  • 当未找到上游 DNS 服务器时,在容器的 /etc/resolv.conf 中添加警告。moby/moby#49827

28.1.0

2025-04-17

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

新增

  • 添加 docker bake 子命令作为 docker buildx bake 的别名。docker/cli#5947
  • 实验性:在 docker rundocker create 上添加新的 --use-api-socket 标志,以启用从容器内部访问 Docker 套接字,并与容器共享来自主机的凭据。docker/cli#5858
  • docker image inspect 现在支持 --platform 标志,用于检查多平台镜像的特定平台。docker/cli#5934

错误修复和增强功能

  • 添加 CLI shell 补全对上下文名称的支持。docker/cli#6016
  • 修复 docker images --tree 未将非容器镜像的内容大小计入总镜像内容大小的问题。docker/cli#6000
  • 修复 docker load 未保留被替换镜像的问题。moby/moby#49650
  • 修复登录自定义注册表时 docker login 提示的问题。docker/cli#6015
  • 修复在高 CPU 核心数机器上 docker stats 无法正常工作的问题。moby/moby#49734
  • 修复与私有仓库交互时导致 docker pull/push 失败的回归问题。docker/cli#5964
  • 修复在没有 ip_tables 内核模块的主机上阻止无根 Docker 设置的问题。moby/moby#49727
  • 修复可能导致 firewalld 重新加载后,不需要的 iptables 规则被恢复且从未被删除的问题。moby/moby#49728
  • 改进 CLI 对 docker service scale 的补全。docker/cli#5968
  • docker images --tree 现在默认隐藏未标记的镜像和悬空(dangling)镜像。docker/cli#5924
  • 如果无法建立与 Docker 守护进程的连接,docker system info 将提供退出码。docker/cli#5918
  • containerd 镜像存储:修复使用 BuildKit 构建时未发出 image tag 事件的问题。 moby/moby#49678
  • containerd 镜像存储:改进 docker push/pull 对远程 registry 错误的处��方式。 moby/moby#49770
  • containerd 镜像存储:显示非层镜像 blob 的拉取进度。 moby/moby#49746

打包更新

网络

  • 修复 Swarm 容器上的主机端口映射在 docker psdocker inspect 时重复显示的 bug。 moby/moby#49724
  • 修复导致容器网络附加失败,并出现错误“Bridge port not forwarding”(桥接端口未转发)的问题。 moby/moby#49705
  • 修复从默认桥接网络中的容器移除 --link 时出现的问题。 moby/moby#49778
  • 改进网络-端点关系的跟踪方式,以减少错误返回“has active endpoints”(有活动端点)错误的机会。 moby/moby#49736
  • 改进“has active endpoints”(有活动端点)错误消息,包含仍连接到正在删除的网络上的端点名称。 moby/moby#49773

API

  • 将 API 版本更新到 v1.49moby/moby#49718
  • GET /image/{name}/json 现在支持 platform 参数,允许指定要检查的多平台镜像的哪个平台变体。 moby/moby#49586
  • GET /info 现在返回一个 FirewallBackend 字段,其中包含有关守护进程防火墙配置的信息。 moby/moby#49761

Go SDK

  • 将最低要求的 Go 版本更新到 go1.23。 docker/cli#5868
  • cli/command/context: 从 JSON 输出中移除临时的 ContextType 字段。 docker/cli#5981
  • client: 在可能的情况下,保留镜像引用为规范格式。 moby/moby#49609

已弃用

  • API:在 GET /info 响应的 RegistryConfig 结构中,已弃用的 AllowNondistributableArtifactsCIDRsAllowNondistributableArtifactsHostnames 字段在 API v1.49 中已省略。 moby/moby#49749
  • API:已弃用:GET /info 端点中的 ContainerdCommit.ExpectedRuncCommit.ExpectedInitCommit.Expected 字段在 API v1.48 中已弃用,现在在 API v1.49 中已省略。 moby/moby#48556
  • Go-SDK:cli/command/image: 弃用 RunPull:此函数仅在内部使用,将在下个版本中移除。 docker/cli#5975
  • Go-SDK:cli/config/configfile: 弃用 ConfigFile.Experimental 字段。自 v20.10 版本以来,实验性 CLI 功能始终启用,此字段不再使用。对于可选功能,请改用 ConfigFile.Features。此字段将在未来版本中移除。 docker/cli#5977
  • Go-SDK:弃用 pkg/archive,该模块已迁移到 github.com/moby/go-archivemoby/moby#49743
  • Go-SDK:弃用 pkg/atomicwriter,该模块已迁移到 github.com/moby/sys/atomicwritermoby/moby#49748
  • Go-SDK:opts: 移除已弃用的 PortOptConfigOptSecretOpt 别名。 docker/cli#5953
  • Go-SDK:registry: 弃用 APIEndpoint.Official 字段。 moby/moby#49706

28.0.4

2025-03-25

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

错误修复和增强功能

  • 修复与私有仓库交互时导致 docker pull/push 失败的回归问题。docker/cli#5964

28.0.3

2025-03-25

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

错误修复和增强功能

  • 修复当容器在数据被消费前退出时,docker run 过早截断 STDOUT/STDERR 的问题。 docker/cli#5957

打包更新

28.0.2

2025-03-19

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

错误修复和增强功能

  • 修复 CLI 特定属性 (docker.cli.*) 被无意中传递给下游 OTel 服务的问题。docker/cli#5842
  • 修复用户指定的 OTEL_RESOURCE_ATTRIBUTES 属性被 CLI 内部遥测属性覆盖的问题。CLI 现在可以正确地将用户指定的属性与内部属性合并,使两者共存。docker/cli#5842
  • 修复在 Windows 系统上,当存在 v28.0.0 之前创建的容器时,daemon 无法启动的问题。moby/moby#49626
  • 修复在使用 --min-free-space 参数运行 docker buildx prune 时可能出现的错误。moby/moby#49623
  • 修复关闭容器时 daemon 日志中出现虚假的 io: read/write on closed pipe 错误。moby/moby#49590
  • 修复当 containerd socket 未立即可用时,Docker daemon 过早失败的问题。moby/moby#49603
  • 默认在容器的 /proc/sys 中屏蔽 Linux 热中断信息。moby/moby#49560
  • 更新 contrib/check-config.sh,以检查更多与 iptables 相关的内核模块。moby/moby#49622
  • containerd 镜像存储:修复通过 --user 参数传递的用户 ID 处理中的整数溢出问题。moby/moby#49652
  • containerd 镜像存储:修复 daemon 日志中记录虚假的 reference for unknown type: application/vnd.in-toto+json 警告。moby/moby#49652
  • containerd 镜像存储:提高运行大量容器时 docker ps 的性能。moby/moby#49365

打包更新

网络

  • 添加环境变量 DOCKER_INSECURE_NO_IPTABLES_RAW=1,以允许 Docker 在 Linux 内核无法提供 CONFIG_IP_NF_RAW 支持的系统上运行。启用此选项后,Docker 将不会在 iptables 的 raw 表中创建规则。警告:生产环境不建议使用此选项,因为它会降低安全性,允许本地网络上的其他主机路由到发布到主机地址的端口,即使它们发布到 127.0.0.1。此选项绕过了 Docker Engine 28.0.0 中引入的一些安全强化措施。moby/moby#49621
  • 允许在端点连接到 macvlan 网络驱动程序(其中父接口已关闭)时启动容器。moby/moby#49630
  • 对于源自 gateway_mode=routed 网络的报文,不要跳过 DNAT。moby/moby#49577
  • 修复导致 docker ps 不一致地报告双栈端口映射的 bug。moby/moby#49657
  • 修复可能导致 docker-proxy 停止将 UDP 数据报转发到容器的 bug。moby/moby#49649
  • 修复导致 docker-proxy 过早关闭到容器的 UDP 连接并导致源地址不必要地更改的 bug。moby/moby#49649

Go SDK

  • cli-plugins/manager 中的各种类型和常量移至单独的包。docker/cli#5902
  • 将最低要求的 Go 版本更新至 go1.23。moby/moby#49541
  • cli/command:将 PrettyPrint 工具函数移至 cli/command/formatterdocker/cli#5916
  • runconfig/errors:将 ErrConflictHostNetwork 拆分为 ErrConflictConnectToHostNetworkErrConflictDisconnectFromHostNetworkmoby/moby#49605

已弃用

  • Go-SDK:废弃 cli-plugins/manager.ResourceAttributesEnvvar 常量。此常量曾用于内部,但其值为 OTEL_RESOURCE_ATTRIBUTES 名称,该名称属于 OpenTelemetry 规范。使用此常量的用户应自行定义。此常量将在下一版本中移除。docker/cli#5881
  • Go-SDK:废弃 opts.PortOptopts.ConfigOptopts.SecretOpt。这些类型已移至 opts/swarmopts 包。docker/cli#5907
  • Go-SDK:移除 service/logs 包。docker/cli#5910
  • Go-SDK:cli/command/image:废弃 PushTrustedReference 并移至 cli/trustdocker/cli#5894
  • Go-SDK:cli/command/image:废弃 TrustedPush 并将其内部化。docker/cli#5894
  • Go-SDK:cli/command:废弃 Cli.NotaryClient,请改用 trust.GetNotaryRepository。此方法已不再使用,将在下一版本中移除。docker/cli#5885
  • Go-SDK:cli/command:废弃 Cli.RegistryClient。此方法仅在内部使用,将在下一版本中移除。请改用 client.NewRegistryClientdocker/cli#5889
  • Go-SDK:registry:废弃 RepositoryInfo.Official 字段。moby/moby#49567
  • Go-SDK:registry:废弃 HostCertsDir。此函数仅在内部使用,将在下一版本中移除。moby/moby#49612
  • Go-SDK:registry:废弃 SetCertsDir。使用 RootlessKit 运行时,证书目录现在会自动选择,不应再手动设置。moby/moby#49612

28.0.1

2025-02-26

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

网络

  • 移除对内核模块 ip_setip_set_hash_netnetfilter_xt_set 的依赖。
    • 此依赖项在 28.0.0 版本中引入,但被证明具有过度干扰性。使用这些模块的 iptables 规则已被替换。moby/moby#49530
  • 允许在禁用 IPv6 的主机上启动 daemon,无需强制要求 --ip6tables=false 参数。moby/moby#49525
  • 修复了一个错误,该错误会导致使用 --restart=always 且已发布端口已被占用的容器进入紧密循环重启。 moby/moby#49507
  • 修复了 Swarm 入口(ingress)的一个问题,该问题由 iptables 规则顺序不正确导致。 moby/moby#49538
  • 修复了从 --config-only 网络创建 swarm 作用域网络的问题。 moby/moby#49521
  • 修复了 docker network inspect 在没有指定 IPAM 配置的情况下报告新创建网络的 IPv6 网关带有 CIDR 后缀的问题,此问题会在守护程序(daemon)重启后恢复正常。 moby/moby#49520
  • 改进了当内核模块 ip_setip_set_hash_netnetfilter_xt_set 不可用时报告的错误信息。 moby/moby#49524
  • 将大多数 Docker 的 iptables 规则移出 filter-FORWARD 链,以便其他应用程序可以自由地追加必须在 Docker 规则之后的规则。 moby/moby#49518
  • 更新了 --help 输出和 man 手册页,以说明哪些选项仅适用于默认的桥接网络。 moby/moby#49522

错误修复和增强功能

  • 修复了在使用 "skip-tls-verify" 选项时,docker context create 总是返回错误的问题。 docker/cli#5850
  • 修复了 shell 补全在建议服务和节点时显示 ID 而不是名称的问题。 docker/cli#5848
  • 修复了 docker exec/run 返回非零状态时意外将退出状态打印到标准错误输出的问题。 docker/cli#5854
  • 修复了回归错误:protocol "tcp" is not supported by the RootlessKit port driver "slirp4netns"moby/moby#49514
  • containerd 镜像存储:修复了 docker inspect 无法显示包含所有平台缺失层(missing layers)的多平台镜像的问题。 moby/moby#49533
  • containerd 镜像存储:修复了 docker images --tree 报告错误内容大小的问题。 moby/moby#49535
  • 修复了在 i386 平台上的编译问题。 moby/moby#49526

打包更新

API

  • containerd 镜像存储:修复了对于仅含索引(index-only)的镜像,GET /images/json?manifests=1 未填充 Manifests 字段的问题。 moby/moby#49533
  • containerd 镜像存储:修复了 GET /images/json and /images/<name>/jsonSize.Content 字段包含了本地不可用内容大小的问题。 moby/moby#49535

28.0.0

2025-02-19

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

新增

  • 新增通过 --mount type=image 选项将镜像挂载到容器内的功能。 moby/moby#48798
    • 您还可以指定 --mount type=image,image-subpath=[subpath],... 选项来从镜像中挂载特定路径。 docker/cli#5755
  • docker images --tree 现在显示元数据徽章(metadata badges)。 docker/cli#5744
  • docker loaddocker savedocker history 现在支持 --platform 标志,允许您在对多平台镜像执行单平台操作时选择特定平台。 docker/cli#5331
  • docker service createdocker stack 命令添加 OOMScoreAdj 参数。 docker/cli#5145
  • docker buildx prune 现在支持 reserved-spacemax-used-spacemin-free-spacekeep-bytes 过滤器。 moby/moby#48720
  • Windows:新增支持将 containerd 作为守护程序(daemon)的子进程运行,而非使用系统安装的 containerd。 moby/moby#47955

网络

  • docker-proxy 二进制文件已更新,旧版本将无法与更新后的 dockerd 一起工作。 moby/moby#48132
    • 关闭了一个时间窗口,在此时间窗口内,用户态代理(docker-proxy)可能接受 TCP 连接,而这些连接会在 iptables NAT 规则设置完成后失败。
    • 可执行文件 rootlesskit-docker-proxy 不再使用,已从构建和分发中移除。
  • 从宿主机 /etc/resolv.conf 读取的 DNS 域名服务器现在总是从宿主机的网络命名空间中访问。 moby/moby#48290
    • 当宿主机的 /etc/resolv.conf 不包含任何域名服务器且没有指定 --dns 覆盖时,除了默认桥接网络和构建容器外,不再使用 Google 的 DNS 服务器。
  • 桥接(bridge)和 macvlan 网络中的容器接口现在使用随机生成的 MAC 地址。 moby/moby#48808
    • 接口启动时将发送 Gratuitous ARP / Neighbour Advertisement 消息,以便在 IP 地址被重用时,它们能与新生成的 MAC 地址关联起来。
    • 默认桥接网络中的 IPv6 地址现在由 IPAM 分配,而不是从 MAC 地址派生。
  • 已弃用的 OCI prestart 钩子现在仅由构建容器使用。对于其他容器,网络接口在任务创建完成后、容器任务启动前被添加到网络命名空间。 moby/moby#47406
  • docker rundocker container createdocker network connect 命令新增 gw-priority 选项。Engine 将使用此选项来确定哪个网络为容器提供默认网关。在 docker run 命令中,此选项仅通过扩展的 --network 语法可用。 docker/cli#5664
  • 新增网络标签(netlabel) com.docker.network.endpoint.ifname,用于自定义将容器连接到网络时使用的接口名称。Linux 上的所有内置网络驱动程序均支持此标签。 moby/moby#49155
    • 当创建指定了多个网络的容器时,无法保证网络连接到容器的顺序。因此,如果自定义接口名称使用与自动生成名称相同的名称前缀(例如 eth),容器可能无法启动。
    • 推荐的做法是使用不同的前缀(例如 en0),或者使用足够大的数字后缀以避免冲突(例如 eth100)。
    • docker network connect 命令中,可以通过 --driver-opt 标志指定此标签,例如 docker network connect --driver-opt=com.docker.network.endpoint.ifname=foobar …
    • 或者在 docker run 命令中使用长格式的 --network 标志,例如 docker run --network=name=bridge,driver-opt=com.docker.network.endpoint.ifname=foobar …
  • 如果自定义网络驱动程序报告支持 GwAllocChecker 能力,那么在网络创建之前,它将收到一个包含网络选项的 GwAllocCheckerRequest 请求。然后,自定义驱动程序可以回复不应分配网关 IP 地址。 moby/moby#49372

桥接网络中的端口发布

  • dockerd 现在需要 Linux 内核支持 ipsetmoby/moby#48596
    • 用于实现端口发布和网络隔离的 iptablesip6tables 规则已进行了广泛修改。这启用了以下一些功能更改,并且是重构以在未来版本中启用本地 nftables 支持的第一步。moby/moby#48815
    • 如果需要降级到较早版本的守护进程,则需要手动清理新规则。最简单且最可靠的方法是重启主机,或者在启动较早版本守护进程之前,使用 iptables -Fip6tables -F 清空 filter 表中的所有现有 iptables 规则。如果无法这样做,请以 root 身份运行以下命令:
      • iptables -D FORWARD -m set --match-set docker-ext-bridges-v4 dst -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT; ip6tables -D FORWARD -m set --match-set docker-ext-bridges-v6 dst -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
      • iptables -D FORWARD -m set --match-set docker-ext-bridges-v4 dst -j DOCKER; ip6tables -D FORWARD -m set --match-set docker-ext-bridges-v6 dst -j DOCKER
      • 如果您之前以 ACCEPT 设置了 iptables filter-FORWARD 策略,并且需要恢复对未发布端口的访问,还需要删除 DOCKER 链中的每个桥接网络的规则。例如,iptables -D DOCKER ! -i docker0 -o docker0 -j DROP
  • 修复了一个安全问题,该问题曾允许远程主机直接连接到容器的已发布端口。moby/moby#49325
  • 修复了一个安全问题,该问题曾允许邻居主机连接到映射在回环地址上的端口。moby/moby#49325
  • 修复了阻止端口发布到本地链接地址的问题。moby/moby#48570
  • 现在,通过主机的公共 IP 地址,同一主机上其他网络中的容器可以可靠地访问容器发布的 UDP 端口。moby/moby#48571
  • 现在,只有当 Docker 在主机本身上启用 IP 转发时(sysctl 参数 net.ipv6.conf.all.forwardingnet.ipv6.conf.default.forwarding),Docker 才会将 ip6tables filter 表中 FORWARD 链的策略设置为 DROP。这与现有的 IPv4 行为保持一致。moby/moby#48594
    • 如果您的主机上启用了 IPv6 转发,但您之前依赖 Docker 将 ip6tables filter-FORWARD 策略设置为 DROP,您可能需要更新主机的配置以确保其安全。
  • 现在,在 DOCKER iptables 链中阻止了通过直接路由访问未使用 -p/--publish 暴露的容器端口。moby/moby#48724
    • 如果主机上默认的 iptables filter-FORWARD 策略之前被设置为 ACCEPT,并且仍然需要从远程主机直接路由访问容器的未发布端口,可选项包括:
      • 发布您需要的端口。
      • 使用下面描述的新选项 gateway_mode_ipv[46]=nat-unprotected
    • 发布到主机地址的容器端口将继续通过这些主机地址(使用 NAT 或用户空间代理)进行访问。
    • 未发布的容器端口仍可从 Docker 主机通过容器的 IP 地址直接访问。
  • 使用 gateway_mode_ipv[46]=routed 创建的网络现在可以从同一 Docker 主机上运行的其他桥接网络以及主机外部访问。moby/moby#48596
  • 桥接驱动选项 com.docker.network.bridge.gateway_mode_ipv4com.docker.network.bridge.gateway_mode_ipv6 现在接受模式 nat-unprotectedmoby/moby#48597
    • nat-unprotected 类似于默认的 nat 模式,但不为每个端口/协议设置规则。这意味着可以通过直接路由从远程主机访问容器上的任何端口。
  • 当网络也是 internal 时,桥接驱动选项 com.docker.network.bridge.gateway_mode_ipv4com.docker.network.bridge.gateway_mode_ipv6 现在接受模式 isolatedmoby/moby#49262
    • internal 网络中,通常会为桥接设备分配地址。因此,Docker 主机上的进程可以访问该网络,网络中的容器可以访问侦听该桥接地址上的主机服务(包括侦听在主机任何地址,0.0.0.0:: 上的服务)。
    • 使用 gateway 模式 isolated 创建的 internal 桥接网络在 Docker 主机上没有地址。
  • 当端口映射包含一个因使用 --gateway_mode_ipv[46] 禁用主机 NAT 而无法使用的主机 IP 地址或端口号时,容器创建将不再失败。如果在连接或断开网络时 gateway endpoint 发生变化,可能需要这些未使用的字段。日志中会记录有关未使用字段的消息。moby/moby#48575
  • 当用户空间代理启用时,不要为容器自己的已发布端口创建 iptables nat-POSTROUTING masquerade 规则。moby/moby#48854

IPv6

  • 添加 docker network create 选项 --ipv4。要禁用网络的 IPv4 地址分配,请使用 docker network create --ipv4=false [...]docker/cli#5599
  • 守护进程选项 --ipv6(在 daemon.json 中为 "ipv6": true)现在可以单独使用,无需与 fixed-cidr-v6 一起使用。moby/moby#48319
  • IPAM 现在可以处理大于 "/64" 的子网。moby/moby#49223
  • 现在,桥接网络所属桥接设备分配的地址已禁用重复地址检测 (DAD)。moby/moby#48609
  • 修改了 host-gateway,以兼容仅 IPv6 的网络。moby/moby#48807
    • 当在 --add-host 选项中使用特殊值 host-gateway 代替地址时,它会被 Docker 主机上的一个地址替换,以便可以通过名称引用主机。使用的地址属于默认桥接网络(通常是 docker0)。到目前为止,它一直是 IPv4 地址,因为桥接网络上的所有容器都有 IPv4 地址。
    • 现在,如果在默认桥接网络上启用了 IPv6,则会为 IPv4 和 IPv6 地址创建 /etc/hosts 条目。因此,仅连接到仅 IPv6 网络的容器可以通过名称访问主机。
    • --host-gateway-ip 选项会覆盖用于替换 host-gateway 的地址。命令行上现在允许使用两个这样的选项,分别用于一个 IPv4 gateway 和一个 IPv6。
    • daemon.json 文件中,要提供两个地址,请使用 "host-gateway-ips"。例如,"host-gateway-ips": ["192.0.2.1", "2001:db8::1111"]

错误修复和增强功能

  • 默认添加 IPv6 回环地址作为不安全注册表。moby/moby#48540
  • 添加对 Cobra 生成的 dockerd 补全脚本的支持。moby/moby#49339
  • 修复通过 systemd 在启动时自动启动容器时 DNS 查询失败的问题。moby/moby#48812
  • 修复 Docker Swarm 模式忽略 volume.subpath 的问题。docker/cli#5833
  • 修复 docker export 在操作取消后仍继续导出的问题。moby/moby#49265
  • 修复 docker export 在失败后不释放容器可写层的问题。moby/moby#48517
  • 修复 docker images --tree 在有多个名称可用时,不必要地截断长镜像名称的问题。docker/cli#5757
  • 修复了守护进程启动时,名称与另一个容器 ID 匹配的容器无法恢复的 bug。moby/moby#48669
  • 修复 docker ps 显示的一些 IPv6 地址未正确用方括号括起来的问题。docker/cli#5468
  • 修复 docker run 期间无法取消镜像拉取操作的 bug。docker/cli#5645
  • 修复将守护进程作为 Windows 服务运行时,错误处理不当导致退出不干净的问题。moby/moby#48518
  • 修复使用 --attach stdout--attach stderr 时,docker run 的输出与使用 stdin 时不一致的问题。现在,如果容器退出,docker run --attach stdin 也会退出。docker/cli#5662
  • 修复使用 NSS 模块支持的 subid 设置无根 Docker 时的问题。moby/moby#49036
  • CLI 生成的补全脚本现在在每个命令/标志建议旁边显示描述。docker/cli#5756
  • 现在,docker ps 在端口绑定中显示的 IPv6 地址使用方括号括起来。docker/cli#5363
  • 为 Compose 实现了端口验证方法。docker/cli#5524
  • 改进了命令行上无效标志的错误输出。docker/cli#5233
  • 改进了使用另一个容器网络命名空间启动容器失败时的错误。moby/moby#49367
  • 改进了对无效 API 错误的处理,这类错误曾可能导致显示空错误消息。moby/moby#49373
  • 改进了未知(子)命令和无效参数的输出和一致性。docker/cli#5234
  • 改进守护程序配置中 exec-opts 的验证。 moby/moby#48979
  • 更新 --gpus=0 标志的处理方式,使其与 NVIDIA Container Runtime 保持一致。 moby/moby#48482
  • client.ContainerCreate 现在将 HostConfig 中的 CapAddCapDrop 字段规范化为它们的标准形式。 moby/moby#48551
  • docker image save 现在生成稳定的时间戳。 moby/moby#48611
  • docker inspect 现在允许你检查 Swarm 配置。 docker/cli#5573
  • containerd 镜像存储:在 docker pull 中添加对 Extracting 层状态的支持。 moby/moby#49064
  • containerd 镜像存储:修复了 `commit`、`import` 和 `build` 在替换镜像时未将其保留为悬空镜像的问题。 moby/moby#48316
  • containerd 镜像存储:当请求的平台未加载时,使 `docker load --platform` 返回错误。 moby/moby#48718
  • 修复 `--link` 选项的验证问题。 docker/cli#5739
  • 添加对 `network-diagnostic-port` 守护程序配置选项的验证。 moby/moby#49305
  • 除非明确配置,否则在不需要网关的情况下不再为网关保留 IP 地址。具体来说,包括带有选项 com.docker.network.bridge.inhibit_ipv4 的“内部”桥接网络,没有父接口的 ipvlanmacvlan 网络,以及 L3 IPvlan 模式。 moby/moby#49261
  • 如果自定义网络驱动程序报告支持 GwAllocChecker 能力,那么在网络创建之前,它将收到一个包含网络选项的 GwAllocCheckerRequest 请求。然后,自定义驱动程序可以回复不应分配网关 IP 地址。 moby/moby#49372
  • 修复了一个问题,该问题导致容器无法同时连接到 L3 IPvlan 和其他网络类型。 moby/moby#49130
  • 断开容器与网络连接时,移除正确的 /etc/hosts 条目。 moby/moby#48857
  • 修复重复的网络断开事件。 moby/moby#48800
  • 解决了与更改 docker0fixed-cidr 相关的问题,以及从用户管理的默认桥接 (--bridge) 推断配置的问题。 moby/moby#48319
  • 移除特性标志 windows-dns-proxy,该标志在版本 26.1.0 中引入,用于控制 Windows 容器向外部 DNS 解析器转发,以便使 nslookup 工作。该标志在版本 27.0.0 中已默认启用。 moby/moby#48738
  • 移除用于 SCTP 校验和的 iptables mangle 规则。可以通过在守护程序环境中设置 DOCKER_IPTABLES_SCTP_CHECKSUM=1 来重新启用该规则。此覆盖设置将在未来版本中移除。 moby/moby#48149
  • 在大多数情况下,连接到桥接网络的速度更快。 moby/moby#49302

打包更新

Go SDK

  • 改进空对象 ID 的验证。客户端在使用空 ID 或名称时现在返回“Invalid Parameter”错误。这将某些“Inspect”函数返回的错误从“Not found”错误更改为“Invalid Parameter”。 moby/moby#49381
  • Client.ImageBuild() 现在从 API 请求的查询字符串中省略默认值。 moby/moby#48651
  • api/types/container:合并 StatsStatsResponsemoby/moby#49287
  • client.WithVersion:设置 API 版本时去除 v 前缀。 moby/moby#49352
  • client:添加 WithTraceOptions,允许指定自定义 OTe1 跟踪选项。 moby/moby#49415
  • client:添加 HijackDialer 接口。 moby/moby#49388
  • client:添加 SwarmManagementAPIClient 接口,用于描述所有与 Swarm 特定对象相关的 API 客户端方法。 moby/moby#49388
  • client:添加 WithTraceOptions,允许指定自定义 OTel 跟踪选项。 moby/moby#49415
  • clientImageHistoryImageLoadImageSave 现在使用可变参数函数选项 (variadic functional options)。 moby/moby#49466
  • pkg/containerfs:移至内部 (internal)。 moby/moby#48097
  • pkg/reexec:现在可在除 Linux、Windows、macOS 和 FreeBSD 之外的其他平台使用。 moby/moby#49118
  • api/types/container:引入 CommitResponse 类型。目前是 IDResponse 的别名,但在未来版本中可能会成为独立类型。 moby/moby#49444
  • api/types/container:引入 ExecCreateResponse 类型。目前是 IDResponse 的别名,但在未来版本中可能会成为独立类型。 moby/moby#49444

API

  • 更新 API 版本至 v1.48 moby/moby#48476
  • GET /images/{name}/json 响应现在返回 Manifests 字段,其中包含镜像索引中包含的子清单信息。这包括平台特定清单和构建证明等内容。 moby/moby#48264
  • POST /containers/create 现在支持类型为 imageMount,用于在容器内部挂载镜像。 moby/moby#48798
  • GET /images/{name}/history 现在支持一个 platform 参数(JSON 编码的 OCI Platform 类型),允许你指定要显示历史记录的平台。 moby/moby#48295
  • POST /images/{name}/loadGET /images/{name}/get 现在支持一个 platform 参数(JSON 编码的 OCI Platform 类型),允许你指定要加载/保存的平台。不传递此参数将加载/保存完整的多平台镜像。 moby/moby#48295
  • 改进容器和 exec 调整大小时无效宽度/高度的错误提示。 moby/moby#48679
  • POST /containers/create 端点现在在响应中包含警告,当将容器范围的 VolumeDriver 选项与通过 Mounts 定义的卷结合使用时,因为 VolumeDriver 选项对这些卷没有效果。此警告以前由 CLI 生成。 moby/moby#48789
  • containerd 镜像存储:GET /images/jsonGET /images/{name}/json 响应现在包含 Descriptor 字段,其中包含镜像目标的 OCI 描述符。新字段仅在守护进程提供多平台镜像存储时填充。 moby/moby#48894
  • containerd 镜像存储:GET /containers/{name}/json 现在返回一个 ImageManifestDescriptor 字段,其中包含用于创建容器的镜像的特定平台镜像清单的 OCI 描述符。 moby/moby#48855
  • 添加调试端点(GET /debug/vars, GET /debug/pprof/, GET /debug/pprof/cmdline, GET /debug/pprof/profile, GET /debug/pprof/symbol, GET /debug/pprof/trace, GET /debug/pprof/{name})现在也可以通过带版本的 API 路径(/v<API-version>/<endpoint>)访问。 moby/moby#49051
  • 修复 API 在验证错误时返回 500 状态码而不是 400 的问题。 moby/moby#49217
  • 修复归档端点(HEAD /containers/{name:.*}/archive, GET /containers/{name:.*}/archive, PUT /containers/{name:.*}/archive)返回 500 状态而不是 400 状态的问题。 moby/moby#49219
  • POST /containers/create 现在在 HostConfig.SecurityOpt 中接受 writable-cgroups=true 选项,用于将容器的 cgroups 挂载为可写。这提供了一种比 HostConfig.Privileged 更精细的方法。 moby/moby#48828
  • POST /build/prunekeep-bytes 重命名为 reserved-space,现在支持额外的清理参数 max-used-spacemin-free-spacemoby/moby#48720
  • POST /networks/create 现在有一个 EnableIPv4 字段。将其设置为 false 会禁用该网络的 IPv4 IPAM。 moby/moby#48271
    • GET /networks/{id} 现在返回一个 EnableIPv4 字段,显示该网络是否启用了 IPv4 IPAM。 moby/moby#48271
    • 用户定义的 bridge 网络需要启用 IPv4 或 IPv6 地址分配。默认的 bridge 网络(docker0)不能禁用 IPv4。 moby/moby#48323
    • 可以创建禁用 IPv4、IPv6 或同时禁用这两种地址族的地址分配的 macvlanipvlan 网络。 moby/moby#48299
    • Windows 或 Swarm 网络不能禁用 IPv4。 moby/moby#48278
  • 添加了一种方法来指定哪个网络应为容器提供默认网关。 moby/moby#48936
    • POST /networks/{id}/connectPOST /containers/create 现在在 EndpointsConfig 中接受一个 GwPriority 字段。该值用于确定哪个网络端点为容器提供默认网关。将选择优先级最高的端点。如果多个端点具有相同的优先级,则按网络名称进行字典排序,并选择排序靠前的端点。 moby/moby#48746
    • GET /containers/json 现在在每个网络端点的 NetworkSettings 中返回一个 GwPriority 字段。CLI 的新选项 gw-priority 会在 docker rundocker network connect 命令中使用 GwPriority 字段。 moby/moby#48746
  • --sysctl 选项中针对 eth0 的设置不再自动迁移到网络端点。 moby/moby#48746
    • 例如,在 Docker CLI 中,docker run --network mynet --sysctl net.ipv4.conf.eth0.log_martians=1 ... 会被拒绝。您必须改用 docker run --network name=mynet,driver-opt=com.docker.network.endpoint.sysctls=net.ipv4.conf.IFNAME.log_martians=1 ...
  • GET /containers/json 现在返回一个 ImageManifestDescriptor 字段,与 /containers/{name}/json 中的字段一致。该字段仅在守护进程提供多平台镜像存储时填充。 moby/moby#49407

已移除

  • Fluent 日志驱动选项 fluentd-async-connect 在 v20.10 中已被弃用,现在已被移除。 moby/moby#46114
  • docker stopdocker restart 命令上的 --time 选项已被弃用,并重命名为 --timeoutdocker/cli#5485
  • Go-SDK: pkg/ioutils:移除 NewReaderErrWrapper,因为它从未使用过。 moby/moby#49258
  • Go-SDK: pkg/ioutils:移除已弃用的 BytesPipe, NewBytesPipe, ErrClosed, WriteCounter, NewWriteCounter, NewReaderErrWrapper, NopFlushermoby/moby#49245
  • Go-SDK: pkg/ioutils:移除已弃用的 NopWriterNopWriteClosermoby/moby#49256
  • Go-SDK: pkg/sysinfo:移除已弃用的 NumCPU。 moby/moby#49242
  • Go-SDK:移除 pkg/broadcaster,因为它只在内部使用。 moby/moby#49172
  • Go-SDK:移除已弃用的 cli.Errors 类型。 docker/cli#5549
  • 移除 pkg/ioutils.ReadCloserWrapper,因为它只在测试中使用。 moby/moby#49237
  • 移除已弃用的 api-cors-header 配置参数和 dockerd--api-cors-header 选项。 moby/moby#48209
  • 移除已弃用的 APIEndpoint.Version 字段、APIVersion 类型以及 APIVersion1APIVersion2 常量。 moby/moby#49004
  • 移除已弃用的 api-cors-header 配置参数和 Docker 守护进程的 --api-cors-header 选项。 docker/cli#5437
  • 移除已弃用的 pkg/directory 包。 moby/moby#48779
  • 移除已弃用的 pkg/dmsg.Dmesg()moby/moby#48109
  • 移除已弃用的 image/spec 包,该包已移至单独的模块(github.com/moby/docker-image-spec)。 moby/moby#48460
  • 移除已弃用 logentries 日志驱动程序的迁移代码和错误。 moby/moby#48891
  • 移除对已弃用的外部 graph-driver 插件的支持。 moby/moby#48072
  • api/types:移除已弃用的 container.ContainerNodeContainerJSONBase.Node 字段。 moby/moby#48107
  • api/types:移除已弃用的别名:ImagesPruneReport, VolumesPruneReport, NetworkCreateRequest, NetworkCreate, NetworkListOptions, NetworkCreateResponse, NetworkInspectOptions, NetworkConnect, NetworkDisconnect, EndpointResource, NetworkResource, NetworksPruneReport, ExecConfig, ExecStartCheck, ContainerExecInspect, ContainersPruneReport, ContainerPathStat, CopyToContainerOptions, ContainerStats, ImageSearchOptions, ImageImportSource, ImageLoadResponse, ContainerNodemoby/moby#48107
  • libnetwork/iptables:移除已弃用的 IPV, Iptables, IP6TablesPassthrough()moby/moby#49121
  • pkg/archive:移除已弃用的 CanonicalTarNameForPath, NewTempArchive, TempArchivemoby/moby#48708
  • pkg/fileutils:移除已弃用的 GetTotalUsedFdsmoby/moby#49210
  • pkg/ioutils:移除 OnEOFReader,因为它只在内部使用。 moby/moby#49170
  • pkg/longpath:移除已弃用的 Prefix 常量。 moby/moby#48779
  • pkg/stringid:移除已弃用的 IsShortIDValidateID 函数。 moby/moby#48705
  • runconfig/opts: 删除已弃用的 ConvertKVStringsToMap moby/moby#48102
  • runconfig: 删除已弃用的 ContainerConfigWrapper, SetDefaultNetModeIfBlank, DefaultDaemonNetworkMode, IsPreDefinedNetwork moby/moby#48102
  • container: 删除已弃用的 ErrNameReserved, ErrNameNotReserved. moby/moby#48728
  • 移除 Daemon.ContainerInspectCurrent() 方法并更改 Daemon.ContainerInspect() 签名以接受 backend.ContainerInspectOptions 结构体 moby/moby#48672
  • 删除已弃用的 Daemon.Exists()Daemon.IsPaused() 方法。 moby/moby#48723

已弃用

  • API: GET /info 响应中的 BridgeNfIptablesBridgeNfIp6tables 字段现在始终为 false,并在 API v1.49 中省略。netfilter 模块现在按需加载,不再在守护进程启动期间加载,这使得这些字段已过时。 moby/moby#49114
  • API: 对于返回 JSON 进度响应的流式端点(例如 POST /images/createPOST /images/{name}/pushPOST /build),其中的 errorprogress 字段已弃用。 moby/moby#49447
    • 用户应改用 errorDetailprogressDetail 字段中的信息。
    • 这些字段分别在 API v1.4 (docker v0.6.0) 和 API v1.8 (docker v0.7.1) 中被标记为已弃用,但仍会返回。
    • 这些字段在未来的 API 版本中将留空或被省略。
  • 弃用 Daemon.Register()。此函数未使用,并将在下一版本中移除。 moby/moby#48702
  • 弃用 client.ImageInspectWithRaw 函数,转而使用新的 client.ImageInspectmoby/moby#48264
  • 弃用 daemon/config.Config.ValidatePlatformConfig()。此方法曾用作 config.Validate 的辅助方法,应改用后者。 moby/moby#48985
  • 弃用 pkg/reexec。此包已弃用并移至单独的模块。请改用 github.com/moby/sys/reexecmoby/moby#49129
  • 弃用用于推送不可分发工件的配置 docker/cli#5724
  • 弃用 --allow-nondistributable-artifacts 守护进程标志以及 daemon.json 中相应的 allow-nondistributable-artifacts 字段。设置任一选项将不再生效,但会添加一个弃用警告日志以提高对弃用的意识。 moby/moby#49065
  • 弃用 GET /info API 响应中的 RegistryConfig.AllowNondistributableArtifactsCIDRsRegistryConfig.AllowNondistributableArtifactsHostnames 字段。对于 API 版本 v1.48 及更早版本,这些字段仍包含在响应中,但始终为 null。在 API 版本 v1.49 及更高版本中,这些字段将完全被省略。 moby/moby#49065
  • Go-SDK: 弃用 registry.ServiceOptions.AllowNondistributableArtifacts 字段。 moby/moby#49065
  • Go-SDK: api/types/system.Info 中的 BridgeNfIptablesBridgeNfIp6tables 字段以及 pkg/sysinfo.SysInfo 中的 BridgeNFCallIPTablesDisabledBridgeNFCallIP6TablesDisabled 字段已弃用,并将在下一版本中移除。 moby/moby#49114
  • Go-SDK: client: 弃用 CommonAPIClient 接口,转而使用 APIClient 接口。CommonAPIClient 将在下一版本中更改为 APIClient 的别名,并在再下一版本中移除。 moby/moby#49388
  • Go-SDK: client: 弃用 ErrorConnectionFailed 辅助函数。此函数仅在内部使用,并将在下一版本中移除。 moby/moby#49389
  • Go-SDK: pkg/ioutils: 弃用 NewAtomicFileWriter, AtomicWriteFile, AtomicWriteSet, NewAtomicWriteSet,转而使用 pkg/atomicwriter 中的对应项。 moby/moby#49171
  • Go-SDK: pkg/sysinfo: 弃用 NumCPU。此实用工具与 runtime.NumCPU 具有相同的行为。 moby/moby#49241
  • Go-SDK: pkg/system: 弃用 MkdirAll。此函数为 Windows GUID 卷路径提供了自定义处理。Go 标准库在 go1.22 及更高版本中已支持此类路径的处理,此函数现为 os.MkdirAll 的别名,应改用后者。此别名将在下一版本中移除。 moby/moby#49162
  • Go-SDK: 弃用 pkg/parsers.ParseKeyValueOptmoby/moby#49177
  • Go-SDK: 弃用 pkg/parsers.ParseUintListMaximum, pkg/parsers.ParseUintList。这些实用工具仅在内部使用,并将在下一版本中移除。 moby/moby#49222
  • Go-SDK: 弃用 api/type.IDResponse,转而使用 container.CommitResponsecontainer.ExecCreateResponse,它们目前是别名,但在未来版本中可能会成为不同的类型。此类型将在下一版本中移除。 moby/moby#49446
  • Go-SDK: 弃用 api/types/container.ContainerUpdateOKBody,转而使用 UpdateResponse。此类型将在下一版本中移除。 moby/moby#49442
  • Go-SDK: 弃用 api/types/container.ContainerTopOKBody,转而使用 TopResponse。此类型将在下一版本中移除。 moby/moby#49442
  • Go-SDK: pkg/jsonmessage: 修复 ProgressMessage, ErrorMessage 的弃用问题,它们分别在 Docker v0.6.0 和 v0.7.1 中被弃用。 moby/moby#49447
  • GraphDriverDataapi/types 移至 api/types/storage。旧类型已弃用,并将在下一版本中移除。 moby/moby#48108
  • RequestPrivilegeFuncapi/types 移至 api/types/registry。旧类型已弃用,并将在下一版本中移除。 moby/moby#48119
  • api/types 移至 api/types/container - NetworkSettings, NetworkSettingsBase, DefaultNetworkSettings, SummaryNetworkSettings, Health, HealthcheckResult, NoHealthcheck, Starting, HealthyUnhealthy 常量, MountPoint, Port, ContainerState, Container, ContainerJSONBase, ContainerJSON, ContainerNode。旧类型已弃用,并将在下一版本中移除。 moby/moby#48108
  • api/types 移至 api/types/image - ImageInspect, RootFS。旧类型已弃用,并将在下一版本中移除。 moby/moby#48108
  • GET /info 端点中的 ContainerdCommit.Expected, RuncCommit.ExpectedInitCommit.Expected 字段已弃用,并将在 API v1.49 中省略。 moby/moby#48478
  • api/types/registry: 弃用 ServiceConfig.AllowNondistributableArtifactsCIDRsServiceConfig.AllowNondistributableArtifactsHostnames 字段。这些字段将在下一版本中移除。 moby/moby#49065
  • api/types/system/Commit.Expected 字段已弃用,不应再使用。 moby/moby#48478
  • daemon/graphdriver: 弃用 GetDriver() moby/moby#48079
  • libnetwork/iptables: 弃用 Passthrough。此函数仅在内部使用,并将在下一版本中移除。 moby/moby#49115
  • pkg/directory.Size() 函数已弃用,并将在下一版本中移除。 moby/moby#48057
  • registry: 弃用 APIEndpoint.TrimHostName;现在对远程名称无条件地修剪主机名。此字段将在下一版本中移除。 moby/moby#49005
  • daemon.json 中的 allow-nondistributable-artifacts 字段。设置任一选项将不再生效,但会添加一个弃用警告日志以提高对弃用的意识。此警告计划在下一版本中变为错误。 moby/moby#49065
页面选项