Docker Engine 版本 28 发行说明
目录
此页面描述了 Docker Engine 版本 28 的最新更改、新增功能、已知问题和修复。
有关更多信息,请参阅
- 已弃用和移除的功能,请参阅已弃用 Engine 功能。
- Engine API 的更改,请参阅Engine API 版本历史。
28.1.1
2025-04-18有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑
错误修复和增强功能
- 修复
dockerd-rootless-setuptool.sh
错误报告缺失iptables
的问题。moby/moby#49833 - containerd 镜像存储:修复使用
docker load
加载包含零大小 tar 头部的归档文件时可能导致守护进程崩溃的问题。moby/moby#49837
打包更新
- 更新 Buildx 至 v0.23.0。docker/docker-ce-packaging#1185
- 更新 Compose 至 v2.35.1。docker/docker-ce-packaging#1188
网络
- 当未找到上游 DNS 服务器时,在容器的
/etc/resolv.conf
中添加警告。moby/moby#49827
28.1.0
2025-04-17有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑
新增
- 添加
docker bake
子命令作为docker buildx bake
的别名。docker/cli#5947 - 实验性:在
docker run
和docker 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
打包更新
- 添加 Debian "Trixie" 软件包。 docker/docker-ce-packaging#1181
- 添加 Fedora 42 软件包。 docker/containerd-packaging#418, docker/docker-ce-packaging#1169
- 添加 Ubuntu 25.04 "Plucky Puffin" 软件包。 docker/containerd-packaging#419, docker/docker-ce-packaging#1177
- 将 BuildKit 更新到 v0.21.0。 moby/moby#49809
- 将 Compose 更新到 v2.35.0。 docker/docker-ce-packaging#1183
- 将 Go 运行时更新到 1.23.8。 docker/cli#5986, docker/docker-ce-packaging#1180, moby/moby#49737
网络
- 修复 Swarm 容器上的主机端口映射在
docker ps
和docker 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.49。 moby/moby#49718
GET /image/{name}/json
现在支持platform
参数,允许指定要检查的多平台镜像的哪个平台变体。 moby/moby#49586GET /info
现在返回一个FirewallBackend
字段,其中包含有关守护进程防火墙配置的信息。 moby/moby#49761
Go SDK
- 将最低要求的 Go 版本更新到 go1.23。 docker/cli#5868
cli/command/context
: 从 JSON 输出中移除临时的ContextType
字段。 docker/cli#5981client
: 在可能的情况下,保留镜像引用为规范格式。 moby/moby#49609
已弃用
- API:在
GET /info
响应的RegistryConfig
结构中,已弃用的AllowNondistributableArtifactsCIDRs
和AllowNondistributableArtifactsHostnames
字段在 API v1.49 中已省略。 moby/moby#49749 - API:已弃用:
GET /info
端点中的ContainerdCommit.Expected
、RuncCommit.Expected
和InitCommit.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-archive
。 moby/moby#49743 - Go-SDK:弃用
pkg/atomicwriter
,该模块已迁移到github.com/moby/sys/atomicwriter
。 moby/moby#49748 - Go-SDK:
opts
: 移除已弃用的PortOpt
、ConfigOpt
、SecretOpt
别名。 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
打包更新
- 将 BuildKit 更新到 v0.20.2。 moby/moby#49698
- 将 runc 更新到 v1.2.6。 moby/moby#49682
- 将 containerd 更新到 v1.7.26。 docker/containerd-packaging#409
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
打包更新
- 将 BuildKit 更新至 v0.20.1。moby/moby#49587
- 将 Buildx 更新至 v0.22.0。docker/docker-ce-packaging#1175
- 将 Compose 更新至 v2.34.0。docker/docker-ce-packaging#1172
- 将 Go 运行时更新至 1.23.7。docker/cli#5890, docker/docker-ce-packaging#1171, moby/moby#49580
- 将 RootlessKit 更新至 v2.3.4。moby/moby#49614
- 将 containerd(仅限静态二进制文件)更新至 v1.7.27。moby/moby#49656
网络
- 添加环境变量
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/formatter
。docker/cli#5916- runconfig/errors:将
ErrConflictHostNetwork
拆分为ErrConflictConnectToHostNetwork
和ErrConflictDisconnectFromHostNetwork
。moby/moby#49605
已弃用
- Go-SDK:废弃
cli-plugins/manager.ResourceAttributesEnvvar
常量。此常量曾用于内部,但其值为OTEL_RESOURCE_ATTRIBUTES
名称,该名称属于 OpenTelemetry 规范。使用此常量的用户应自行定义。此常量将在下一版本中移除。docker/cli#5881 - Go-SDK:废弃
opts.PortOpt
、opts.ConfigOpt
和opts.SecretOpt
。这些类型已移至opts/swarmopts
包。docker/cli#5907 - Go-SDK:移除
service/logs
包。docker/cli#5910 - Go-SDK:
cli/command/image
:废弃PushTrustedReference
并移至cli/trust
。docker/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.NewRegistryClient
。docker/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_set
、ip_set_hash_net
和netfilter_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_set
、ip_set_hash_net
和netfilter_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
打包更新
- 将
github.com/go-jose/go-jose/v4
更新到 v4.0.5 版本,以解决 GHSA-c6gw-w398-hv78 / CVE-2025-27144 安全漏洞。 docker/cli#5867 - 将 Buildx 更新到 v0.21.1 版本。 docker/docker-ce-packaging#1167
- 将 Compose 更新到 v2.33.1 版本。 docker/docker-ce-packaging#1168
API
- containerd 镜像存储:修复了对于仅含索引(index-only)的镜像,
GET /images/json?manifests=1
未填充Manifests
字段的问题。 moby/moby#49533 - containerd 镜像存储:修复了
GET /images/json and /images/<name>/json
的Size.Content
字段包含了本地不可用内容大小的问题。 moby/moby#49535
28.0.0
2025-02-19有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑
- docker/cli, 28.0.0 版本里程碑
- moby/moby, 28.0.0 版本里程碑
- 已弃用和移除的功能,详见 已弃用功能(Deprecated Features)。
- Engine API 的变更,详见 API 版本历史(API version history)。
新增
- 新增通过
--mount type=image
选项将镜像挂载到容器内的功能。 moby/moby#48798- 您还可以指定
--mount type=image,image-subpath=[subpath],...
选项来从镜像中挂载特定路径。 docker/cli#5755
- 您还可以指定
docker images --tree
现在显示元数据徽章(metadata badges)。 docker/cli#5744docker load
、docker save
和docker history
现在支持--platform
标志,允许您在对多平台镜像执行单平台操作时选择特定平台。 docker/cli#5331- 为
docker service create
和docker stack
命令添加OOMScoreAdj
参数。 docker/cli#5145 docker buildx prune
现在支持reserved-space
、max-used-space
、min-free-space
和keep-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 run
、docker container create
和docker 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 内核支持ipset
。moby/moby#48596- 用于实现端口发布和网络隔离的
iptables
和ip6tables
规则已进行了广泛修改。这启用了以下一些功能更改,并且是重构以在未来版本中启用本地nftables
支持的第一步。moby/moby#48815 - 如果需要降级到较早版本的守护进程,则需要手动清理新规则。最简单且最可靠的方法是重启主机,或者在启动较早版本守护进程之前,使用
iptables -F
和ip6tables -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.forwarding
和net.ipv6.conf.default.forwarding
),Docker 才会将ip6tables
filter 表中FORWARD
链的策略设置为DROP
。这与现有的 IPv4 行为保持一致。moby/moby#48594- 如果您的主机上启用了 IPv6 转发,但您之前依赖 Docker 将 ip6tables filter-FORWARD 策略设置为
DROP
,您可能需要更新主机的配置以确保其安全。
- 如果您的主机上启用了 IPv6 转发,但您之前依赖 Docker 将 ip6tables filter-FORWARD 策略设置为
- 现在,在
DOCKER
iptables 链中阻止了通过直接路由访问未使用-p
/--publish
暴露的容器端口。moby/moby#48724- 如果主机上默认的 iptables filter-FORWARD 策略之前被设置为
ACCEPT
,并且仍然需要从远程主机直接路由访问容器的未发布端口,可选项包括:- 发布您需要的端口。
- 使用下面描述的新选项
gateway_mode_ipv[46]=nat-unprotected
。
- 发布到主机地址的容器端口将继续通过这些主机地址(使用 NAT 或用户空间代理)进行访问。
- 未发布的容器端口仍可从 Docker 主机通过容器的 IP 地址直接访问。
- 如果主机上默认的 iptables filter-FORWARD 策略之前被设置为
- 使用
gateway_mode_ipv[46]=routed
创建的网络现在可以从同一 Docker 主机上运行的其他桥接网络以及主机外部访问。moby/moby#48596 - 桥接驱动选项
com.docker.network.bridge.gateway_mode_ipv4
和com.docker.network.bridge.gateway_mode_ipv6
现在接受模式nat-unprotected
。moby/moby#48597nat-unprotected
类似于默认的nat
模式,但不为每个端口/协议设置规则。这意味着可以通过直接路由从远程主机访问容器上的任何端口。
- 当网络也是
internal
时,桥接驱动选项com.docker.network.bridge.gateway_mode_ipv4
和com.docker.network.bridge.gateway_mode_ipv6
现在接受模式isolated
。moby/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
中的CapAdd
和CapDrop
字段规范化为它们的标准形式。 moby/moby#48551docker image save
现在生成稳定的时间戳。 moby/moby#48611docker 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
的“内部”桥接网络,没有父接口的ipvlan
或macvlan
网络,以及 L3 IPvlan 模式。 moby/moby#49261 - 如果自定义网络驱动程序报告支持
GwAllocChecker
能力,那么在网络创建之前,它将收到一个包含网络选项的GwAllocCheckerRequest
请求。然后,自定义驱动程序可以回复不应分配网关 IP 地址。 moby/moby#49372 - 修复了一个问题,该问题导致容器无法同时连接到 L3 IPvlan 和其他网络类型。 moby/moby#49130
- 断开容器与网络连接时,移除正确的
/etc/hosts
条目。 moby/moby#48857 - 修复重复的网络断开事件。 moby/moby#48800
- 解决了与更改
docker0
的fixed-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 运行时至 1.23.6。 docker/cli#5795, moby/moby#49393, docker/docker-ce-packaging#1161
- 更新
runc
至 v1.2.5(仅静态二进制文件)。 moby/moby#49464 - 更新 containerd 至 v1.7.25。 moby/moby#49252
- 更新 BuildKit 至 v0.20.0。 moby/moby#49495
- 更新 Buildx 至 v0.21.0。 docker/docker-ce-packaging#1166
- 更新 Compose 至 v2.32.3。 docker/docker-ce-packaging#1143
dockerd(8)
手册页的规范来源已移回moby/moby
仓库本身。 moby/moby#48298
Go SDK
- 改进空对象 ID 的验证。客户端在使用空 ID 或名称时现在返回“Invalid Parameter”错误。这将某些“Inspect”函数返回的错误从“Not found”错误更改为“Invalid Parameter”。 moby/moby#49381
Client.ImageBuild()
现在从 API 请求的查询字符串中省略默认值。 moby/moby#48651api/types/container
:合并Stats
和StatsResponse
。 moby/moby#49287client.WithVersion
:设置 API 版本时去除 v 前缀。 moby/moby#49352client
:添加WithTraceOptions
,允许指定自定义 OTe1 跟踪选项。 moby/moby#49415client
:添加HijackDialer
接口。 moby/moby#49388client
:添加SwarmManagementAPIClient
接口,用于描述所有与 Swarm 特定对象相关的 API 客户端方法。 moby/moby#49388client
:添加WithTraceOptions
,允许指定自定义 OTel 跟踪选项。 moby/moby#49415client
:ImageHistory
、ImageLoad
和ImageSave
现在使用可变参数函数选项 (variadic functional options)。 moby/moby#49466pkg/containerfs
:移至内部 (internal)。 moby/moby#48097pkg/reexec
:现在可在除 Linux、Windows、macOS 和 FreeBSD 之外的其他平台使用。 moby/moby#49118api/types/container
:引入CommitResponse
类型。目前是IDResponse
的别名,但在未来版本中可能会成为独立类型。 moby/moby#49444api/types/container
:引入ExecCreateResponse
类型。目前是IDResponse
的别名,但在未来版本中可能会成为独立类型。 moby/moby#49444
API
- 更新 API 版本至 v1.48 moby/moby#48476
GET /images/{name}/json
响应现在返回Manifests
字段,其中包含镜像索引中包含的子清单信息。这包括平台特定清单和构建证明等内容。 moby/moby#48264POST /containers/create
现在支持类型为image
的Mount
,用于在容器内部挂载镜像。 moby/moby#48798GET /images/{name}/history
现在支持一个platform
参数(JSON 编码的 OCI Platform 类型),允许你指定要显示历史记录的平台。 moby/moby#48295POST /images/{name}/load
和GET /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/json
和GET /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#48828POST /build/prune
将keep-bytes
重命名为reserved-space
,现在支持额外的清理参数max-used-space
和min-free-space
。 moby/moby#48720POST /networks/create
现在有一个EnableIPv4
字段。将其设置为false
会禁用该网络的 IPv4 IPAM。 moby/moby#48271GET /networks/{id}
现在返回一个EnableIPv4
字段,显示该网络是否启用了 IPv4 IPAM。 moby/moby#48271- 用户定义的 bridge 网络需要启用 IPv4 或 IPv6 地址分配。默认的 bridge 网络(
docker0
)不能禁用 IPv4。 moby/moby#48323 - 可以创建禁用 IPv4、IPv6 或同时禁用这两种地址族的地址分配的
macvlan
和ipvlan
网络。 moby/moby#48299 - Windows 或 Swarm 网络不能禁用 IPv4。 moby/moby#48278
- 添加了一种方法来指定哪个网络应为容器提供默认网关。 moby/moby#48936
POST /networks/{id}/connect
和POST /containers/create
现在在EndpointsConfig
中接受一个GwPriority
字段。该值用于确定哪个网络端点为容器提供默认网关。将选择优先级最高的端点。如果多个端点具有相同的优先级,则按网络名称进行字典排序,并选择排序靠前的端点。 moby/moby#48746GET /containers/json
现在在每个网络端点的NetworkSettings
中返回一个GwPriority
字段。CLI 的新选项gw-priority
会在docker run
和docker 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 ...
。
- 例如,在 Docker CLI 中,
GET /containers/json
现在返回一个ImageManifestDescriptor
字段,与/containers/{name}/json
中的字段一致。该字段仅在守护进程提供多平台镜像存储时填充。 moby/moby#49407
已移除
- Fluent 日志驱动选项
fluentd-async-connect
在 v20.10 中已被弃用,现在已被移除。 moby/moby#46114 docker stop
和docker restart
命令上的--time
选项已被弃用,并重命名为--timeout
。 docker/cli#5485- Go-SDK:
pkg/ioutils
:移除NewReaderErrWrapper
,因为它从未使用过。 moby/moby#49258 - Go-SDK:
pkg/ioutils
:移除已弃用的BytesPipe
,NewBytesPipe
,ErrClosed
,WriteCounter
,NewWriteCounter
,NewReaderErrWrapper
,NopFlusher
。 moby/moby#49245 - Go-SDK:
pkg/ioutils
:移除已弃用的NopWriter
和NopWriteCloser
。 moby/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
类型以及APIVersion1
和APIVersion2
常量。 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.ContainerNode
和ContainerJSONBase.Node
字段。 moby/moby#48107api/types
:移除已弃用的别名:ImagesPruneReport
,VolumesPruneReport
,NetworkCreateRequest
,NetworkCreate
,NetworkListOptions
,NetworkCreateResponse
,NetworkInspectOptions
,NetworkConnect
,NetworkDisconnect
,EndpointResource
,NetworkResource
,NetworksPruneReport
,ExecConfig
,ExecStartCheck
,ContainerExecInspect
,ContainersPruneReport
,ContainerPathStat
,CopyToContainerOptions
,ContainerStats
,ImageSearchOptions
,ImageImportSource
,ImageLoadResponse
,ContainerNode
。 moby/moby#48107libnetwork/iptables
:移除已弃用的IPV
,Iptables
,IP6Tables
和Passthrough()
。 moby/moby#49121pkg/archive
:移除已弃用的CanonicalTarNameForPath
,NewTempArchive
,TempArchive
。 moby/moby#48708pkg/fileutils
:移除已弃用的GetTotalUsedFds
。 moby/moby#49210pkg/ioutils
:移除OnEOFReader
,因为它只在内部使用。 moby/moby#49170pkg/longpath
:移除已弃用的Prefix
常量。 moby/moby#48779pkg/stringid
:移除已弃用的IsShortID
和ValidateID
函数。 moby/moby#48705runconfig/opts
: 删除已弃用的ConvertKVStringsToMap
moby/moby#48102runconfig
: 删除已弃用的ContainerConfigWrapper
,SetDefaultNetModeIfBlank
,DefaultDaemonNetworkMode
,IsPreDefinedNetwork
moby/moby#48102container
: 删除已弃用的ErrNameReserved
,ErrNameNotReserved
. moby/moby#48728- 移除
Daemon.ContainerInspectCurrent()
方法并更改Daemon.ContainerInspect()
签名以接受backend.ContainerInspectOptions
结构体 moby/moby#48672 - 删除已弃用的
Daemon.Exists()
和Daemon.IsPaused()
方法。 moby/moby#48723
已弃用
- API:
GET /info
响应中的BridgeNfIptables
和BridgeNfIp6tables
字段现在始终为false
,并在 API v1.49 中省略。netfilter 模块现在按需加载,不再在守护进程启动期间加载,这使得这些字段已过时。 moby/moby#49114 - API: 对于返回 JSON 进度响应的流式端点(例如
POST /images/create
、POST /images/{name}/push
和POST /build
),其中的error
和progress
字段已弃用。 moby/moby#49447- 用户应改用
errorDetail
和progressDetail
字段中的信息。 - 这些字段分别在 API v1.4 (docker v0.6.0) 和 API v1.8 (docker v0.7.1) 中被标记为已弃用,但仍会返回。
- 这些字段在未来的 API 版本中将留空或被省略。
- 用户应改用
- 弃用
Daemon.Register()
。此函数未使用,并将在下一版本中移除。 moby/moby#48702 - 弃用
client.ImageInspectWithRaw
函数,转而使用新的client.ImageInspect
。 moby/moby#48264 - 弃用
daemon/config.Config.ValidatePlatformConfig()
。此方法曾用作config.Validate
的辅助方法,应改用后者。 moby/moby#48985 - 弃用
pkg/reexec
。此包已弃用并移至单独的模块。请改用github.com/moby/sys/reexec
。 moby/moby#49129 - 弃用用于推送不可分发工件的配置 docker/cli#5724
- 弃用
--allow-nondistributable-artifacts
守护进程标志以及daemon.json
中相应的allow-nondistributable-artifacts
字段。设置任一选项将不再生效,但会添加一个弃用警告日志以提高对弃用的意识。 moby/moby#49065 - 弃用
GET /info
API 响应中的RegistryConfig.AllowNondistributableArtifactsCIDRs
和RegistryConfig.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
中的BridgeNfIptables
、BridgeNfIp6tables
字段以及pkg/sysinfo.SysInfo
中的BridgeNFCallIPTablesDisabled
、BridgeNFCallIP6TablesDisabled
字段已弃用,并将在下一版本中移除。 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.ParseKeyValueOpt
。 moby/moby#49177 - Go-SDK: 弃用
pkg/parsers.ParseUintListMaximum
,pkg/parsers.ParseUintList
。这些实用工具仅在内部使用,并将在下一版本中移除。 moby/moby#49222 - Go-SDK: 弃用
api/type.IDResponse
,转而使用container.CommitResponse
和container.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 - 将
GraphDriverData
从api/types
移至api/types/storage
。旧类型已弃用,并将在下一版本中移除。 moby/moby#48108 - 将
RequestPrivilegeFunc
从api/types
移至api/types/registry
。旧类型已弃用,并将在下一版本中移除。 moby/moby#48119 - 从
api/types
移至api/types/container
-NetworkSettings
,NetworkSettingsBase
,DefaultNetworkSettings
,SummaryNetworkSettings
,Health
,HealthcheckResult
,NoHealthcheck
,Starting
,Healthy
和Unhealthy
常量,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.Expected
和InitCommit.Expected
字段已弃用,并将在 API v1.49 中省略。 moby/moby#48478api/types/registry
: 弃用ServiceConfig.AllowNondistributableArtifactsCIDRs
和ServiceConfig.AllowNondistributableArtifactsHostnames
字段。这些字段将在下一版本中移除。 moby/moby#49065api/types/system/Commit.Expected
字段已弃用,不应再使用。 moby/moby#48478daemon/graphdriver
: 弃用GetDriver()
moby/moby#48079libnetwork/iptables
: 弃用Passthrough
。此函数仅在内部使用,并将在下一版本中移除。 moby/moby#49115pkg/directory.Size()
函数已弃用,并将在下一版本中移除。 moby/moby#48057registry
: 弃用APIEndpoint.TrimHostName
;现在对远程名称无条件地修剪主机名。此字段将在下一版本中移除。 moby/moby#49005daemon.json
中的allow-nondistributable-artifacts
字段。设置任一选项将不再生效,但会添加一个弃用警告日志以提高对弃用的意识。此警告计划在下一版本中变为错误。 moby/moby#49065