Docker Engine 版本 28 发行说明

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

有关更多信息,请参阅:

28.4.0

2025-09-03

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

新增

  • 当键值对 (`"GODEBUG":"..."`) 存在于 docker 上下文元数据中时,允许 Docker CLI 设置 `GODEBUG` 环境变量。 docker/cli#6399

错误修复和增强

  • 添加 `docker pull` 和 `docker image pull` 的 shell 自动补全功能。 docker/cli#6420
  • 修复了 v28.3.3 中的一个回归问题,该问题可能导致客户端未发送 `X-Registry-Auth` 头时 `docker push` 崩溃。 moby/moby#50738
  • Windows:潜在地修复了拉取镜像时出现“访问被拒绝”错误的问题。 moby/moby#50871
  • containerd 镜像存储:修复了在本地构建的非原生镜像上调用 `docker history` 时,因 `snapshot X does not exist` 而失败的问题。 moby/moby#50875
  • containerd 镜像存储:修复了 `docker image prune` 发出正确的 `untag` 和 `delete` 事件,并仅列出已删除镜像的根摘要而不是每个 blob 的问题。 moby/moby#50837
  • 在因缺少认证而失败后,从 `docker push` 和 `docker pull` 中移除交互式登录提示。 docker/cli#6256

打包更新

网络

API

Go SDK

弃用

  • 弃用对命令行标志 `tlscacert`、`tlscert` 和 `tlskey` 的带引号值的特殊处理。 docker/cli#6291
  • 将旧版链接环境变量 (`DOCKER_KEEP_DEPRECATED_LEGACY_LINKS_ENV_VARS`) 在 v28.4 中标记为已弃用,并计划在 v30.0 中移除。 docker/cli#6309
  • Go-SDK:弃用字段 `NetworkSettingsBase.Bridge`、结构体 `NetworkSettingsBase`、`DefaultNetworkSettings` 的所有字段以及结构体 `DefaultNetworkSettings`。 moby/moby#50839
  • Go-SDK:api/types:`build.CacheDiskUsage`、`container.DiskUsage`、`images.DiskUsage` 和 `volumes.DiskUsage` 已弃用,并将在下一个主要版本中移除。 moby/moby#50768
  • Go-SDK:cli-plugins/manager:弃用 `ReexecEnvvar`。 docker/cli#6411
  • Go-SDK:cli-plugins/manager:弃用注释别名 (`CommandAnnotationPlugin`、`CommandAnnotationPluginVendor`、`CommandAnnotationPluginVersion`、`CommandAnnotationPluginInvalid`、`CommandAnnotationPluginCommandPath`),转而使用 `cli-plugins/manager/metadata` 中的等效项。 docker/cli#6298
  • Go-SDK:cli-plugins/manager:弃用元数据别名 (`NamePrefix`、`MetadataSubcommandName`、`HookSubcommandName`、`Metadata`、`ReexecEnvvar`),转而使用 `cli-plugins/manager/metadata` 中的等效项。 docker/cli#6269
  • Go-SDK:cli-plugins/manager:移除 `Candidate` 接口,该接口仅供内部使用。 docker/cli#6269
  • Go-SDK:cli-plugins/manager:移除 `NewPluginError` 函数,该函数仅供内部使用。 docker/cli#6269
  • Go-SDK:cli-plugins/manager:移除已弃用的 `ResourceAttributesEnvvar` 常量。 docker/cli#6269
  • Go-SDK:cli/command/builder:弃用 `NewBuilderCommand` 和 `NewBakeStubCommand`。这些函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/builder:弃用 `NewPruneCommand`。 docker/cli#6343
  • Go-SDK:cli/command/checkpoint:弃用 `NewCheckpointCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/checkpoint:弃用 `NewFormat`、`FormatWrite`。 docker/cli#6341
  • Go-SDK:cli/command/completion:弃用 `NoComplete`。 docker/cli#6405
  • Go-SDK:cli/command/completion:移除已弃用的 `ValidArgsFn`。 docker/cli#6259
  • Go-SDK:cli/command/config:弃用 `NewConfigCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/config:弃用 `NewFormat`、`FormatWrite`、`InspectFormatWrite`。 docker/cli#6341
  • Go-SDK:cli/command/config:弃用 `RunConfigCreate`、`CreateOptions`、`RunConfigInspect`、`InspectOptions`、`RunConfigList`、`ListOptions`、`RunConfigRemove` 和 `RemoveOptions`。 docker/cli#6369
  • Go-SDK:cli/command/container:弃用 `NewBuildCommand`、`NewPullCommand`、`NewPushCommand`、`NewImagesCommand`、`NewImageCommand`、`NewHistoryCommand`、`NewImportCommand`、`NewLoadCommand`、`NewRemoveCommand`、`NewSaveCommand`、`NewTagCommand`、`NewPruneCommand`。这些函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/container:弃用 `NewDiffFormat`、`DiffFormatWrite`。这些函数仅供内部使用,将在下一个版本中移除。 docker/cli#6341
  • Go-SDK:cli/command/container:弃用 `NewRunCommand`、`NewExecCommand`、`NewPsCommand`、`NewContainerCommand`、`NewAttachCommand`、`NewCommitCommand`、`NewCopyCommand`、`NewCreateCommand`、`NewDiffCommand`、`NewExportCommand`、`NewKillCommand`、`NewLogsCommand`、`NewPauseCommand`、`NewPortCommand`、`NewRenameCommand`、`NewRestartCommand`、`NewRmCommand`、`NewStartCommand`、`NewStatsCommand`、`NewStopCommand`、`NewTopCommand`、`NewUnpauseCommand`、`NewUpdateCommand`、`NewWaitCommand`、`NewPruneCommand`。这些函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/context:弃用 `NewContextCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/context:弃用 `RunCreate` 和 `CreateOptions`。 docker/cli#6403
  • Go-SDK:cli/command/context:弃用 `RunExport` 和 `ExportOptions`。 docker/cli#6403
  • Go-SDK:cli/command/context:弃用 `RunImport`。 docker/cli#6403
  • Go-SDK:cli/command/context:弃用 `RunRemove` 和 `RemoveOptions`。 docker/cli#6403
  • Go-SDK:cli/command/context:弃用 `RunUpdate` 和 `UpdateOptions`。 docker/cli#6403
  • Go-SDK:cli/command/context:弃用 `RunUse`。 docker/cli#6403
  • Go-SDK:cli/command/image:弃用 `AuthResolver` 工具。 docker/cli#6357
  • Go-SDK:cli/command/image:弃用 `NewHistoryFormat`、`HistoryWrite`。 docker/cli#6341, docker/cli#6341
  • Go-SDK:cli/command/manifest:弃用 `NewManifestCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/network:弃用 `NewFormat`、`FormatWrite`。 docker/cli#6341
  • Go-SDK:cli/command/network:弃用 `NewNetworkCommand`。这些函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/node:弃用 `NewFormat`、`FormatWrite`、`InspectFormatWrite`。 docker/cli#6341
  • Go-SDK:cli/command/node:弃用 `NewNodeCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/plugin:弃用 `NewFormat`、`FormatWrite`。 docker/cli#6341
  • Go-SDK:cli/command/plugin:弃用 `NewPluginCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/registry:弃用 `NewLoginCommand`、`NewLogoutCommand`、`NewSearchCommand`。这些函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/registry:弃用 `NewSearchFormat`、`SearchWrite`。 docker/cli#6341
  • Go-SDK:cli/command/registry:弃用 `OauthLoginEscapeHatchEnvVar` 常量。 docker/cli#6413
  • Go-SDK:cli/command/secret:弃用 `NewFormat`、`FormatWrite`、`InspectFormatWrite`。 docker/cli#6341
  • Go-SDK:cli/command/secret:弃用 `NewSecretCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/service:弃用 `NewFormat`、`InspectFormatWrite`。 docker/cli#6341
  • Go-SDK:cli/command/service:弃用 `NewServiceCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/stack:弃用 `NewStackCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/stack:弃用 `RunList`、`RunServices`。 docker/cli#6391
  • Go-SDK:cli/command/swarm:弃用 `NewSwarmCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/system:弃用 `NewVersionCommand`、`NewInfoCommand`、`NewSystemCommand`、`NewEventsCommand`、`NewInspectCommand`。这些函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/task:弃用 `NewTaskFormat`、`FormatWrite`。 docker/cli#6341
  • Go-SDK:cli/command/trust:弃用 `NewTrustCommand`。此函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command/trust:弃用 `SignedTagInfo`、`SignerInfo`、`NewTrustTagFormat`、`NewSignerInfoFormat`、`TagWrite`、`SignerInfoWrite`。 docker/cli#6341
  • Go-SDK:cli/command/volume:弃用 `NewVolumeCommand`、`NewPruneCommand`。这些函数将在下一个版本中移除。 docker/cli#6312
  • Go-SDK:cli/command:移除仅供内部使用的 `AddTrustSigningFlags`、`AddTrustVerificationFlags` 和 `AddPlatformFlag` 工具。 docker/cli#6311
  • Go-SDK:cli/command:移除已弃用的 `ConfigureAuth` 工具。 docker/cli#6257
  • Go-SDK:cli/command:移除已弃用的 `CopyToFile` 工具。 docker/cli#6257
  • Go-SDK:cli/config/types:更新 `AuthConfig.Email` 字段的弃用消息。 docker/cli#6392
  • Go-SDK:cli:弃用 `VisitAll`、`DisableFlagsInUseLine` 工具。这些工具仅供内部使用,将在下一个版本中移除。 docker/cli#6276
  • Go-SDK:cli:移除 `HasCompletionArg` 工具。此工具仅供内部使用。 docker/cli#6276
  • Go-SDK:弃用 `cli/command.RegistryAuthenticationPrivilegedFunc`。 docker/cli#6256
  • Go-SDK:弃用 cli/command/stack/formatter。 docker/cli#6391
  • Go-SDK:弃用 cli/command/stack/loader。 docker/cli#6391
  • Go-SDK:弃用 cli/command/stack/options。 docker/cli#6391
  • Go-SDK:弃用 cli/command/stack/swarm。 docker/cli#6391
  • Go-SDK:opts:弃用 `NewNamedListOptsRef`、`NewNamedMapOpts`、`NamedListOpts`、`NamedMapOpts` 和 `NamedOption`。这些类型和函数已不再使用,将在下一个版本中移除。 docker/cli#6292
  • Go-SDK:opts:弃用 `ParseEnvFile`,转而使用 `kvfile.Parse`。 docker/cli#6381
  • Go-SDK:opts:弃用 `QuotedString`。此工具已不再使用,将在下一个版本中移除。 docker/cli#6275
  • Go-SDK:opts:弃用 `ValidateHost` 工具。此函数已不再使用,将在下一个版本中移除。 docker/cli#6280
  • Go-SDK:pkg/jsonmessage:弃用 `JSONMessage.From`、`JSONMessage.Time` 和 `JSONMessage.TimeNano` 字段,因为 API 不再返回它们用于进度消息。请改用 `events.Message` 类型来解析 `/events` 响应。 moby/moby#50762
  • Go-SDK:cli/registry/client 包已弃用,并将在下一个版本中移除。 docker/cli#6313

28.3.3

2025-07-29

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

安全性

此版本修复了一个问题:在 firewalld 重新加载后,已发布的容器端口可以直接从本地网络访问,即使它们旨在仅通过回环地址访问。 CVE-2025-54388 / GHSA-x4rx-4gw3-53p4 / moby/moby#50506

打包更新

28.3.2

2025-07-09

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

错误修复和增强

  • 修复了 `—use-api-socket` 在针对远程守护程序时不正确工作的问题。 docker/cli#6157
  • 修复了启用调试日志时,会打印多余的“otel error”日志的问题。 docker/cli#6160
  • 通过 SSH 连接到远程守护进程时,对 SSH 参数进行引用,以避免意外扩展。 docker/cli#6147
  • 在 `docker login` 和 `docker logout` 期间设置 `DOCKER_AUTH_CONFIG` 时发出警告。 docker/cli#6163

打包更新

28.3.1

2025-07-02

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

打包更新

28.3.0

2025-06-24

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

新增

错误修复和增强

  • 确保在通过 /containers/{id}/stop API 停止容器时,守护程序数据库中(由 /containers/json API 使用)的容器状态是最新的(在 API 响应之前)。 moby/moby#50136
  • 修复了 `docker image inspect inspect` 遗漏空字段的问题。 moby/moby#50135
  • 修复了当 containerd 镜像存储被禁用时,`docker images --tree` 未将镜像标记为正在使用的问题。 docker/cli#6140
  • 修复了 `docker pull/push` 在需要认证时,因提示登录凭据而在非交互模式下挂起的问题。 docker/cli#6141
  • 修复了节点离开 Swarm 时可能存在的资源泄漏问题。 moby/moby#50115
  • 修复了 v28.3.3 中的一个回归问题,该问题导致在登录其他注册表时,`docker pull` 的登录提示会显示 Docker Hub 特定的提示。 docker/cli#6135
  • 修复了在缩放具有放置偏好的服务后,Swarm 中所有新任务可能永远停留在 PENDING 状态的问题。 moby/moby#50211
  • 移除了 Docker 23.0 中意外引入的未文档化、隐藏的顶层 `docker remove` 命令。 docker/cli#6144
  • 验证 registry-mirrors 配置作为 `dockerd --validate` 的一部分,并改进了无效镜像的错误消息。 moby/moby#50240
  • `dockerd-rootless-setuptool.sh`:修复了当 subuid/subgid 系统要求不满足时,脚本静默返回且不显示错误消息的问题。 moby/moby#50059
  • containerd 镜像存储:修复了 `docker push` 未在远程仓库上创建标签的问题。 moby/moby#50199
  • containerd 镜像存储:改进了 `docker pull/push` 在令牌服务器返回错误时的处理。 moby/moby#50176

打包更新

网络

API

  • 将 API 版本更新到 1.51。 moby/moby#50145
  • `GET /images/json` 现在将所有镜像的 `Containers` 字段值设置为使用该镜像的容器数量。 moby/moby#50146

弃用

  • `GET /images/{name}/json` 响应中的空/nil 镜像配置字段现在已弃用,并将在 v29.0 中移除。 docker/cli#6129
  • api/types/container:弃用 `ExecOptions.Detach`。此字段未使用,并将在未来版本中移除。 moby/moby#50219
  • pkg/idtools:弃用 `IdentityMapping` 和 `Identity.Chown`。 moby/moby#50210

28.2.2

2025-05-30

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

错误修复和增强

  • containerd 镜像存储:修复了导致 `docker build --push` 失败的回归问题。这回滚了 修复,该修复解决了 `docker build` 未将覆盖的镜像作为悬空镜像持久化的问题。 moby/moby#50105

网络

  • 创建 iptables `DOCKER-USER` 链时,不要添加显式的 `RETURN` 规则,允许用户追加和插入自己的规则。现有规则在升级时不会被删除,但重启后不会被替换。 moby/moby#50098

28.2.1

2025-05-29

打包更新

28.2.0

2025-05-28

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

注意

RHEL 包目前不可用,将在稍后发布。

新增

  • 将 `{{.Platform}}` 添加为 `docker ps` 的格式化选项,以显示容器运行的镜像平台。 docker/cli#6042
  • 使用 `docker run/create` 和 `-v/--volume` 或 `--mount type=bind` 选项时,增加对绑定挂载源上的相对父路径 (`../`) 的支持。 docker/cli#4966
  • CDI 现在默认启用。 moby/moby#49963
  • 在 `docker info` 中显示发现的 CDI 设备。 docker/cli#6078
  • `docker image rm`:添加 `--platform` 选项以从多平台镜像中移除一个变体。 docker/cli#6109
  • containerd 镜像存储:BuildKit 初步支持在 Windows 上构建 Windows 容器镜像(需要通过 `DOCKER_BUILDKIT=1` 明确启用)。 moby/moby#49740

错误修复和增强

  • 为 fluentd 日志驱动程序添加了一个新的日志选项 (`fluentd-write-timeout`),该选项允许为 fluentd 连接指定写入超时时间。 moby/moby#49911
  • 为实验性的 `--use-api-socket` 选项添加了对 `DOCKER_AUTH_CONFIG` 的支持。 docker/cli#6019
  • 修复了如果指定了不存在的用户或组,`docker exec` 会等待 10 秒的问题。 moby/moby#49868
  • 修复了 `docker swarm init` 忽略 `—external-ca` 的 `cacert` 选项的问题。 docker/cli#5995
  • 修复了 CLI 在配置文件 (`~/.docker/config.json`) 是相对符号链接时无法正确保存的问题。 docker/cli#5282
  • 修复了具有 `—restart always` 策略的 CDI 设备容器在守护进程重启时启动失败的问题。 moby/moby#49990
  • 修复了 shell 自动补全功能只补全某些标志一次的问题,即使它们可以多次设置。 docker/cli#6030
  • 修复了 Swarm CSI 驱动程序的 `plugin does not implement PluginAddr interface` 错误。 moby/moby#49961
  • 改进了 `docker login` 在无效选项时的错误消息。 docker/cli#6036
  • 确保如果 CLI 被强制终止,终端状态会恢复。 docker/cli#6058
  • 更新默认的 seccomp 配置文件以匹配 libseccomp v2.6.0。新的系统调用包括:`listmount`、`statmount`、`lsm_get_self_attr`、`lsm_list_modules`、`lsm_set_self_attr`、`mseal`、`uretprobe`、`riscv_hwprobe`、`getxattrat`、`listxattrat`、`removexattrat` 和 `setxattrat`。这可以防止容器在使用它们时收到 EPERM 错误。 moby/moby#50077
  • `docker inspect`:添加 shell 自动补全,改进 `—type` 的标志描述,并改进验证。 docker/cli#6052
  • containerd 镜像存储:默认启用 BuildKit 垃圾回收器。 moby/moby#49899
  • containerd 镜像存储:修复了 `docker build` 未将覆盖的镜像作为悬空镜像持久化的问题。 moby/moby#49702
  • containerd 镜像存储:修复了 `docker system df` 报告可回收空间为负数的问题。 moby/moby#49707
  • containerd 镜像存储:修复了推送多平台镜像时重复的 `PUT` 请求。 moby/moby#49949

打包更新

网络

  • 添加桥接网络选项 `“com.docker.network.bridge.trusted_host_interfaces”`,接受以冒号分隔的接口名称列表。这些接口可以直接访问容器 IP 地址上的已发布端口。 moby/moby#49832
  • 添加守护程序选项 `“allow-direct-routing”` 以禁用过滤直接发送到容器的来自主机外部的数据包。 moby/moby#49832
  • 如果网络创建请求中的 `EnableIPv4` 或 `EnableIPv6` 覆盖了网络选项 `com.docker.network.enable_ipv4` 或 `com.docker.network.enable_ipv6`,则在 inspect 输出中不显示它们。 moby/moby#49866
  • 修复了守护程序重启后网络删除可能失败的问题,并显示错误“has active endpoints”列出了空的端点名称。 moby/moby#49901
  • 修复了 `docker network inspect --verbose` 有时可能导致守护程序崩溃的问题。 moby/moby#49937
  • 修复了在某些情况下,如果 Swarm 缺少入口网络,覆盖网络的负载均衡器 IP 地址不会释放的问题。 moby/moby#49948
  • 提高了 NetworkDB 在繁忙集群和丢包网络中的可靠性。 moby/moby#49932
  • NetworkDB 可靠性和收敛速度的改进。 moby/moby#49939

API

  • `DELETE /images/{name}` 现在支持 `platforms` 查询参数。它接受 JSON 编码的 OCI 平台对象数组,允许选择特定平台以删除内容。 moby/moby#49982
  • `GET /info` 现在包含 `DiscoveredDevices` 字段。这是一个 `DeviceInfo` 对象数组,每个对象提供设备驱动程序发现的设备的详细信息。 moby/moby#49980

Go SDK

  • `api/types/container`:添加 `ContainerState` 和容器状态常量。 moby/moby#49965
  • `api/types/container`:将 `Summary.State` 更改为 `ContainerState`。 moby/moby#49991
  • `api/types/container`:为健康状态常量定义 `HealthStatus` 类型。 moby/moby#49876
  • `api/types`:弃用已移至 `api/types/build` 的 `BuildResult`、`ImageBuildOptions`、`ImageBuildOutput`、`ImageBuildResponse`、`BuilderVersion`、`BuilderV1` 和 `BuilderBuildKi`。 moby/moby#50025

弃用

  • API:已弃用:`GET /images/{name}/json` 不再返回以下字段:`Config`、`Hostname`、`Domainname`、`AttachStdin`、`AttachStdout`、`AttachStderr`、`Tty`、`OpenStdin`、`StdinOnce`、`Image`、`NetworkDisabled`(除非设置,否则已省略)、`MacAddress`(除非设置,否则已省略)、`StopTimeout`(除非设置,否则已省略)。这些额外的字段由于实现细节包含在响应中,但不是镜像配置的一部分,已在 API v1.46 中标记为弃用,现在已省略。 moby/moby#48457
  • Go-SDK:弃用 builder/remotecontext.Rel()。此函数在较旧的 Go 版本中需要,但现在可以被 `filepath.Rel()` 替换。 moby/moby#49843
  • Go-SDK:api/types:弃用 `BuildCachePruneOptions`,转而使用 `api/types/builder.CachePruneOptions`。 moby/moby#50015
  • Go-SDK:api/types:弃用 `BuildCachePruneReport`,转而使用 `api/types/builder.CachePruneReport`。 moby/moby#50015
  • Go-SDK:api/types:弃用已移至 `api/types/swarm` 的 `NodeListOptions`、`NodeRemoveOptions`、`ServiceCreateOptions`、`ServiceUpdateOptions`、`RegistryAuthFromSpec`、`RegistryAuthFromPreviousSpec`、`ServiceListOptions`、`ServiceInspectOptions` 和 `SwarmUnlockKeyResponse`。 moby/moby#50027
  • Go-SDK:api/types:弃用已移至 api/types/swarm 的 `SecretCreateResponse`、`SecretListOptions`、`ConfigCreateResponse`、`ConfigListOptions`。 moby/moby#50024
  • Go-SDK:client:弃用 `IsErrNotFound`。 moby/moby#50012
  • Go-SDK:container:弃用 `IsValidHealthString`,转而使用 `api/types/container.ValidateHealthStatus`。 moby/moby#49893
  • Go-SDK:container:弃用 `StateStatus`、`WaitCondition` 以及相关的 `WaitConditionNotRunning`、`WaitConditionNextExit` 和 `WaitConditionRemoved` 常量,转而使用 `api/types/container` 中的等效项。 moby/moby#49874
  • Go-SDK:opts:弃用 `ListOpts.GetAll`,转而使用 `ListOpts.GetSlice`。 docker/cli#6032
  • 从 `docker search` 中移除已弃用的 `IsAutomated` 格式占位符。 docker/cli#6091
  • 移除从不符合 OCI 规范的 `docker.pkg.github.com` 注册表拉取镜像的备用方案。 moby/moby#50094
  • 移除对拉取旧版 v2、schema 1 镜像的支持,并移除 `DOCKER_ENABLE_DEPRECATED_PULL_SCHEMA_1_IMAGE` 环境变量。 moby/moby#50036, moby/moby#42300
  • `GET /info` 响应中的 `BridgeNfIptables` 和 `BridgeNfIp6tables` 字段在 API v1.48 中已弃用,现在在 API v1.50 中已省略。 moby/moby#49904
  • errdefs:弃用 `errdefs.FromStatusCode`。请改用 containerd 的 `errhttp.ToNative`。 moby/moby#50030

28.1.1

2025-04-18

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

错误修复和增强

  • 修复了 `dockerd-rootless-setuptool.sh` 错误报告缺少 `iptables` 的问题。 moby/moby#49833
  • containerd 镜像存储:修复了当使用包含零大小 tar 头的归档文件调用 `docker load` 时可能导致守护进程崩溃的问题。 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 run` 和 `docker create` 上添加了一个新的 `--use-api-socket` 标志,以启用从容器内部访问 Docker socket 并与容器共享主机的凭证。 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
  • 修复了 `docker stats` 在 CPU 核心数高的机器上无法正常工作的问题。 moby/moby#49734
  • 修复了与私有仓库交互时导致 `docker pull/push` 失败的回归问题。 docker/cli#5964
  • 修复了在没有 `ip_tables` 内核模块的主机上阻止无根 Docker 设置的问题。 moby/moby#49727
  • 修复了 firewalld 重新加载后,可能导致不需要的 iptables 规则被恢复且永不删除的问题。 moby/moby#49728
  • 改进了 `docker service scale` 的 CLI 自动补全功能。 docker/cli#5968
  • `docker images --tree` 现在默认隐藏未标记和悬空的镜像。 docker/cli#5924
  • `docker system info` 将在无法建立与 Docker 守护进程的连接时提供退出代码。 docker/cli#5918
  • containerd 镜像存储:修复了使用 BuildKit 构建时未发出 `image tag` 事件的问题。 moby/moby#49678
  • containerd 镜像存储:改进了 `docker push/pull` 对远程注册表错误的处理。 moby/moby#49770
  • containerd 镜像存储:显示非层镜像 blob 的拉取进度。 moby/moby#49746

打包更新

网络

  • 修复了 Swarm 容器上的主机端口映射在 `docker ps` 和 `docker inspect` 中重复的问题。 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
  • 客户端:尽可能将镜像引用保持为规范格式。 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:弃用已迁移到 `github.com/moby/go-archive` 的 `pkg/archive`。 moby/moby#49743
  • Go-SDK:弃用已迁移到 `github.com/moby/sys/atomicwriter` 的 `pkg/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

打包更新

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 之前创建的容器时启动失败的问题。 moby/moby#49626
  • 修复了 `docker buildx prune` 在使用 `—min-free-space` 时可能出现的错误。 moby/moby#49623
  • 修复了在关闭容器时守护程序日志中出现虚假 `io: read/write on closed pipe` 错误。 moby/moby#49590
  • 修复了如果 containerd socket 未立即可用,Docker 守护进程会过早失败的问题。 moby/moby#49603
  • 默认情况下,在容器的 `/proc` 和 `/sys` 中屏蔽 Linux 热中断信息。 moby/moby#49560
  • 更新 `contrib/check-config.sh` 以检查更多与 iptables 相关的内核模块。 moby/moby#49622
  • containerd 镜像存储:修复了通过 `—user` 传递的用户 ID 处理中的整数溢出问题。 moby/moby#49652
  • containerd 镜像存储:修复了守护进程日志中记录的虚假 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 不一致地报告双栈端口映射的错误。moby/moby#49657
  • 修复了可能导致 docker-proxy 停止向容器转发 UDP 数据报的错误。moby/moby#49649
  • 修复了导致 docker-proxy 急于关闭到容器的 UDP 连接并导致源地址不必要地更改的错误。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:弃用并内部化 TrustedPushdocker/cli#5894
  • Go-SDK:cli/command:弃用 Cli.NotaryClient:请改用 trust.GetNotaryRepository。此方法不再使用,将在下个版本中移除。docker/cli#5885
  • Go-SDK:cli/command:弃用 Cli.RegistryClient。此方法仅在内部使用,将在下个版本中移除。请改用 client.NewRegistryClientdocker/cli#5889, 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_setip_set_hash_netnetfilter_xt_set 的依赖。
    • 该依赖是在 28.0.0 版本中引入的,但被证明过于具有破坏性。使用这些模块的 iptables 规则已被替换。moby/moby#49530
  • 允许在禁用 IPv6 的主机上启动守护进程,而无需 --ip6tables=falsemoby/moby#49525
  • 修复了一个错误,该错误导致具有 --restart=always 且已发布端口已被占用的容器在紧密循环中重新启动。moby/moby#49507
  • 修复了 Swarm 入口的问题,该问题由 iptables 规则的顺序不正确引起。moby/moby#49538
  • 修复了从 --config-only 网络创建 swarm 范围网络的错误。moby/moby#49521
  • 修复了 docker network inspect 在守护进程重新启动之前,为新创建的没有特定 IPAM 配置的网络报告带有 CIDR 后缀的 IPv6 网关的错误。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 无法显示所有平台缺少层的多平台镜像的问题。moby/moby#49533
  • containerd 镜像存储:修复了 docker images --tree 报告错误内容大小的问题。moby/moby#49535
  • 修复了 i386 上的编译问题 moby/moby#49526

打包更新

API

  • containerd 镜像存储:修复了 GET /images/json?manifests=1 未为仅索引镜像填充 Manifests 的问题。moby/moby#49533
  • containerd 镜像存储:修复了 GET /images/json/images/<name>/json 中的 Size.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 现在显示元数据徽章 docker/cli#5744
  • docker loaddocker savedocker history 现在支持 --platform 标志,允许您为多平台镜像上的单平台操作选择特定平台。docker/cli#5331
  • OOMScoreAdj 添加到 docker service createdocker stackdocker/cli#5145
  • docker buildx prune 现在支持 reserved-spacemax-used-spacemin-free-spacekeep-bytes 过滤器。moby/moby#48720
  • Windows:添加了对将 containerd 作为守护进程的子进程运行的支持,而不是使用系统安装的 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 服务器。
  • 桥接和 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
  • 添加了一个新的网络标签 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 规则已进行 extensive 修改。这使得以下一些功能更改成为可能,并且是重构以在未来版本中启用本机 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
      • 如果您以前在 iptables filter-FORWARD 策略设置为 ACCEPT 的情况下运行,并且需要恢复对未发布端口的访问,还要从 DOCKER 链中删除每个桥接网络规则。例如,iptables -D DOCKER ! -i docker0 -o docker0 -j DROP
  • 修复了一个安全问题,该问题允许远程主机直接连接到容器的已发布端口。moby/moby#49325
  • 修复了一个安全问题,该问题允许邻近主机连接到映射到环回地址的端口。moby/moby#49325
  • 修复了阻止端口发布到链路本地地址的问题。moby/moby#48570
  • 容器发布的 UDP 端口现在可以通过主机的公共 IP 地址可靠地被其他网络上的容器访问。moby/moby#48571
  • Docker 现在仅在自身(sysctl net.ipv6.conf.all.forwardingnet.ipv6.conf.default.forwarding)启用 IP 转发时才将 ip6tables 过滤器表中的 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 或用户态代理。
    • 未发布的容器端口仍然可以通过容器的 IP 地址从 Docker 主机直接访问。
  • 使用 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 模式,但没有设置每个端口/协议规则。这意味着容器上的任何端口都可以通过从远程主机直接路由进行访问。
  • 桥接驱动程序选项 com.docker.network.bridge.gateway_mode_ipv4com.docker.network.bridge.gateway_mode_ipv6 现在接受模式 isolated,当网络也是 internal 时。moby/moby#49262
    • 通常,在 internal 网络中,会为桥接设备分配一个地址。因此,Docker 主机上的进程可以访问该网络,网络中的容器可以访问在该桥接地址上监听的主机服务(包括监听“任何”主机地址 0.0.0.0:: 的服务)。
    • 使用网关模式 isolated 创建的 internal 桥接网络在 Docker 主机上没有地址。
  • 当端口映射包含由于使用 --gateway_mode_ipv[46] 禁用主机 NAT 而无法使用的主机 IP 地址或端口号时,容器创建将不再失败。如果网络连接或断开时网关端点发生变化,可能需要未使用的字段。将记录有关未使用的字段的消息。moby/moby#48575
  • 当用户态代理启用时,不要为容器自己的已发布端口创建 iptables nat-POSTROUTING 伪装规则。moby/moby#48854

IPv6

  • 添加 docker network create 选项 --ipv4。要禁用网络的 IPv4 地址分配,请使用 docker network create --ipv4=false [...]docker/cli#5599
  • 守护进程选项 --ipv6daemon.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 网关,一个用于 IPv6。
    • daemon.json 文件中,要提供两个地址,请使用 "host-gateway-ips"。例如,"host-gateway-ips": ["192.0.2.1", "2001:db8::1111"]

错误修复和增强

  • 默认添加 IPv6 环回地址作为不安全注册表。moby/moby#48540
  • 添加了对 dockerd 的 Cobra 生成的完成脚本的支持。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 匹配的容器在守护进程启动时无法恢复。moby/moby#48669
  • 修复了 docker ps 显示的一些 IPv6 地址未正确用方括号括起来的问题。docker/cli#5468
  • 修复了 docker run 期间无法取消镜像拉取的问题。docker/cli#5645
  • 修复了以 Windows 服务运行时守护进程的错误处理,以防止不干净的退出。moby/moby#48518
  • 修复了使用 --attach stdout--attach stderrstdin 相比,docker run 的输出不一致的问题。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 pullExtracting 层状态的支持。moby/moby#49064
  • containerd 镜像存储:修复了 commitimportbuild 未将替换的镜像保留为悬空镜像的问题。moby/moby#48316
  • containerd 镜像存储:使 docker load --platform 在请求的平台未加载时返回错误。moby/moby#48718
  • 修复了 --link 选项的验证。docker/cli#5739
  • 添加了网络诊断端口守护进程配置选项的验证。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
  • 删除了在 26.1.0 版本中引入的用于控制从 Windows 容器转发到外部 DNS 解析器的功能标志 windows-dns-proxy,以使 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 现在使用可变功能选项。moby/moby#49466
  • pkg/containerfs:移至内部。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.48moby/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
  • 改进了容器调整大小和执行调整大小上无效宽度/高度的错误。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/varsGET /debug/pprof/GET /debug/pprof/cmdlineGET /debug/pprof/profileGET /debug/pprof/symbolGET /debug/pprof/traceGET /debug/pprof/{name})也可以通过版本化 API 路径(/v<API-version>/<endpoint>)访问。moby/moby#49051
  • 修复了 API 为验证错误返回 500 状态码而不是 400 状态码的问题。moby/moby#49217
  • 修复了归档端点 HEAD /containers/{name:.*}/archiveGET /containers/{name:.*}/archivePUT /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
    • 用户定义的桥接网络需要启用 IPv4 或 IPv6 地址分配。对于默认桥接网络 (docker0) 无法禁用 IPv4。moby/moby#48323
    • macvlanipvlan 网络可以创建时禁用 IPv4、IPv6 或两种地址族的地址分配。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 字段。GwPriority 字段由 CLI 的新 docker rundocker network connectgw-priority 选项使用。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:移除已弃用的 BytesPipeNewBytesPipeErrClosedWriteCounterNewWriteCounterNewReaderErrWrapperNopFlushermoby/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
  • 移除对已弃用的外部图形驱动程序插件的支持。moby/moby#48072
  • api/types:移除已弃用的 container.ContainerNodeContainerJSONBase.Node 字段。moby/moby#48107
  • api/types:移除已弃用的别名:ImagesPruneReportVolumesPruneReportNetworkCreateRequestNetworkCreateNetworkListOptionsNetworkCreateResponseNetworkInspectOptionsNetworkConnectNetworkDisconnectEndpointResourceNetworkResourceNetworksPruneReportExecConfigExecStartCheckContainerExecInspectContainersPruneReportContainerPathStatCopyToContainerOptionsContainerStatsImageSearchOptionsImageImportSourceImageLoadResponseContainerNodemoby/moby#48107
  • libnetwork/iptables:移除已弃用的 IPVIptablesIP6TablesPassthrough()moby/moby#49121
  • pkg/archive:移除已弃用的 CanonicalTarNameForPathNewTempArchiveTempArchivemoby/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:移除已弃用的 ConvertKVStringsToMapmoby/moby#48102
  • runconfig:移除已弃用的 ContainerConfigWrapperSetDefaultNetModeIfBlankDefaultDaemonNetworkModeIsPreDefinedNetworkmoby/moby#48102
  • container:移除已弃用的 ErrNameReservedErrNameNotReservedmoby/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 的辅助函数,应改用 config.Validatemoby/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:弃用 NewAtomicFileWriterAtomicWriteFileAtomicWriteSetNewAtomicWriteSet,转而使用 pkg/atomicwriter 等效项。moby/moby#49171
  • Go-SDK:pkg/sysinfo:弃用 NumCPU。此实用程序与 runtime.NumCPU 行为相同。moby/moby#49241
  • Go-SDK:pkg/system:弃用 MkdirAll。此函数提供了 Windows GUID 卷路径的自定义处理。Go 1.22 及更高版本现在支持对此类路径的处理,此函数现在是 os.MkdirAll 的别名,应改用 os.MkdirAll。此别名将在下个版本中移除。moby/moby#49162
  • Go-SDK:弃用 pkg/parsers.ParseKeyValueOptmoby/moby#49177
  • Go-SDK:弃用 pkg/parsers.ParseUintListMaximumpkg/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:修复了 ProgressMessageErrorMessage 的弃用问题,它们分别在 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 - NetworkSettingsNetworkSettingsBaseDefaultNetworkSettingsSummaryNetworkSettingsHealthHealthcheckResultNoHealthcheckStartingHealthyUnhealthy 常量、MountPointPortContainerStateContainerContainerJSONBaseContainerJSONContainerNode。旧类型已弃用,将在下个版本中移除。moby/moby#48108
  • api/types 移动到 api/types/image - ImageInspectRootFS。旧类型已弃用,将在下个版本中移除。moby/moby#48108
  • GET /info 端点中的 ContainerdCommit.ExpectedRuncCommit.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
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.