Docker Engine 25.0 发布说明

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

有关更多信息,请参阅:

25.0.5

2024-03-19

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

安全性

此版本包含对 CVE-2024-29018 的安全修复,该漏洞可能导致数据通过权威 DNS 服务器从“内部”网络泄露。

错误修复和增强

  • CVE-2024-29018:对于仅连接到“内部”网络的容器,请勿将请求转发到外部 DNS 服务器。此前,如果主机的 DNS 服务器在环回地址(如 systemd 的 127.0.0.53)上运行,则会转发请求。 moby/moby#47589

  • 插件:修复在 UserNS 中运行时挂载 /etc/hosts 的问题。 moby/moby#47588

  • rootless:修复 open /etc/docker/plugins: permission deniedmoby/moby#47587

  • 修复多个并行 docker build 运行导致磁盘空间泄漏的问题。 moby/moby#47527

25.0.4

2024-03-07

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

错误修复和增强

  • 在 Windows 上的默认“nat”网络中恢复容器的 DNS 名称。 moby/moby#47490
  • 修复 docker start--checkpoint 一起使用时失败的问题 moby/moby#47466
  • 不要对现有 Swarm 网络强制执行新的验证规则 moby/moby#47482
  • 恢复主机与内部桥接网络上的容器之间的 IP 连接。 moby/moby#47481
  • 修复 v25.0 引入的一个回归,该回归阻止了经典构建器添加在非 Linux 操作系统上创建的带有 xattrs 的 tar 归档。 moby/moby#47483
  • containerd 镜像存储:修复镜像拉取未发出 Pulling fs layer status 的问题。 moby/moby#47484
  • API:为了保持向后兼容性,当使用较旧的客户端(API 版本 < v1.44)时,默认情况下使只读挂载非递归。 moby/moby#47393
  • API:如果镜像配置中缺少 Created 字段,GET /images/{id}/json 会省略 Created 字段(以前是 0001-01-01T00:00:00Z)。 moby/moby#47451
  • API:对于 API 版本 <= 1.43,使用 0001-01-01T00:00:00Z 填充 GET /images/{id}/json 中缺失的 Created 字段。 moby/moby#47387
  • API:修复一个回归,该回归导致 API socket 连接失败时报告 API 版本协商失败。 moby/moby#47470
  • API:在容器创建 API 请求中,当指定容器范围的 MAC 地址,但 NetworkMode 名称或 ID 与 NetworkSettings.Networks 中使用的名称或 ID 不同时,保留提供的端点配置。 moby/moby#47510

打包更新

25.0.3

2024-02-06

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

错误修复和增强

  • containerd 镜像存储:修复当内容存储中未找到清单时,docker image history 失败的 bug。 moby/moby#47348

  • 确保在容器重新启动时,不恢复生成的 MAC 地址,但保留配置的 MAC 地址。 moby/moby#47304

    注意
    • 使用 Docker Engine 25.0.0 版本创建的容器可能具有重复的 MAC 地址。它们必须重新创建。
    • 使用 Docker Engine 25.0.0 或 25.0.1 版本创建的具有用户定义 MAC 地址的容器,在使用 Docker Engine 25.0.2 版本启动时会接收新的 MAC 地址。它们也必须重新创建。
  • 修复 docker save <image>@<digest> 生成的 OCI 归档中索引缺少清单的问题。 moby/moby#47294

  • 修复在 RHEL 和 CentOS 7 上无法创建 MTU 高于 1500 的桥接网络的 bug。 moby/moby#47308, moby/moby#47311

  • 修复容器无法通过 internal 网络通信的 bug。 moby/moby#47303

  • 修复 ipv6 守护程序选项的值被忽略的 bug。 moby/moby#47310

  • 修复尝试使用摘要修订版安装拉取时导致崩溃的 bug。 moby/moby#47323

  • 修复托管 containerd 监督器中潜在的竞争条件。 moby/moby#47313

  • 修复 journald 日志驱动程序的问题,该问题阻止了 systemd 255 版本正确跟踪容器日志。 moby/moby#47243

  • seccomp:更新内置 seccomp 配置文件以包含内核 v5.17 - v6.7 中添加的系统调用,使配置文件与 containerd 使用的配置文件对齐。 moby/moby#47341

  • Windows:修复构建基于早于主机版本的 Windows 镜像时未缓存的问题。 moby/moby#47307, moby/moby#47337

打包更新

25.0.2

2024-01-31

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

安全性

此版本包含以下影响 Docker Engine 及其组件的 CVE 的安全修复。

CVE组件修复版本严重性
CVE-2024-21626runc1.1.12高危, CVSS 8.6
CVE-2024-23651BuildKit1.12.5高危, CVSS 8.7
CVE-2024-23652BuildKit1.12.5高危, CVSS 8.7
CVE-2024-23653BuildKit1.12.5高危, CVSS 7.7
CVE-2024-23650BuildKit1.12.5中危, CVSS 5.5
CVE-2024-24557Docker Engine25.0.2中危, CVSS 6.9

上述漏洞的潜在影响包括

  • 未经授权访问主机文件系统
  • 破坏构建缓存的完整性
  • 在 CVE-2024-21626 的情况下,可能导致完全容器逃逸

有关此版本中解决的安全问题的更多信息,请参阅博客文章。有关每个漏洞的详细信息,请参阅相关的安全公告。

打包更新

25.0.1

2024-01-23

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

错误修复和增强

  • API:修复 Docker Engine v25.0 升级前创建的具有无效网络配置的容器的错误 HTTP 状态码。 moby/moby#47159
  • 确保当容器停止并重新启动时,基于容器 IP 地址的 MAC 地址会重新生成,以防生成的 IP/MAC 地址被重用。 moby/moby#47171
  • 修复在未通过配置设置 host-gateway-ip 时,在构建期间无法工作的问题。 moby/moby#47192
  • 修复阻止容器两次重命名的 bug。 moby/moby#47196
  • 修复检查容器时,其短 ID 添加到网络别名的问题。 moby/moby#47182
  • 修复检测远程构建上下文是否为 Git 仓库的问题。 moby/moby#47136
  • 修复 OCI 清单中层顺序的问题。 moby/moby#47150
  • 修复传递 addrip 挂载选项时卷挂载错误。 moby/moby#47185
  • 改进由于属性名称命名空间不正确而无法设置扩展属性的错误消息。 moby/moby#47178
  • Swarm:修复 start_interval 未传递到容器配置的问题。 moby/moby#47163

打包更新

25.0.0

2024-01-19

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

注意

在早期版本的 Docker Engine 中,递归挂载(子挂载)总是以可写方式挂载,即使指定只读挂载。此行为在 v25.0.0 中已更改,适用于运行内核版本 5.12 或更高版本的主机。现在,只读绑定挂载默认是**递归只读**的。

要获得与早期版本相同的行为,可以为 --mount 标志指定 bind-recursive 选项。

$ docker run --mount type=bind,src=SRC,dst=DST,readonly,bind-recursive=writable IMAGE

此选项不支持 -v--volume 标志。有关更多信息,请参阅 递归挂载

新增

  • 守护程序现在使用 systemd 的默认 LimitNOFILE。在早期版本的 Docker Engine 中,此限制设置为 infinity。这会与最新版本的 systemd 产生问题,其中硬限制增加,导致根据 ulimit 调整其行为的程序消耗大量内存。 moby/moby#45534

    新设置使容器的行为与在主机上运行的程序相同,但可能会导致基于软限制做出不正确假设的程序出现异常行为。要获得以前的行为,可以将 LimitNOFILE=1048576

    此更改目前仅影响使用 BuildKit 和 docker 驱动程序时使用 docker build 创建的构建容器。未来版本的 containerd 也将使用此限制,这将导致此行为影响所有容器,而不仅仅是构建容器。

    如果您在 systemd v240 或更高版本中遇到更高的 ulimit 问题,请考虑添加系统 drop-inoverride 文件以配置您的设置的 ulimit 设置。Flatcar Container Linux 文档 有一篇很棒的文章详细介绍了这个主题。

  • 添加 OpenTelemetry 追踪。 moby/moby#45652, moby/moby#45579

  • 增加对 Linux 下 CDI 设备的支援。 moby/moby#45134, docker/cli#4510, moby/moby#46004

  • 在容器启动期间,为健康检查添加一个额外的间隔。 moby/moby#40894, docker/cli#4405, moby/moby#45965

  • dockerd 添加 --log-format 标志以控制日志格式:文本(默认)或 JSON。 moby/moby#45737

  • 添加对递归只读挂载的支持。 moby/moby#45278, moby/moby#46037

  • 添加对使用 docker image ls --filter=until=<timestamp> 根据时间戳过滤镜像的支持。 moby/moby#46577

错误修复和增强

  • API:修复 ValidateRestartPolicy 中无效策略的错误消息。 moby/moby#46352
  • API:更新 /info 端点以使用 singleflight。 moby/moby#45847
  • 添加一条错误消息,用于在使用 -f 指定 Dockerfile 文件名,并且还使用 stdin 的情况。 docker/cli#4346
  • 添加对 --network 长格式中 mac-addresslink-local-ip 字段的支持。 docker/cli#4419
  • 添加对 docker container createdocker run 中指定多个 --network 标志的支持。 moby/moby#45906
  • 当指定 IPv6 子网时,自动在网络上启用 IPv6。 moby/moby#46455
  • 添加对 IPv6 传输上的覆盖网络的支持。 moby/moby#46790
  • 配置重新加载现在更加健壮:如果在配置重新加载过程中出现错误,则不会应用任何配置更改。 moby/moby#43980
  • 实时恢复:具有自动删除(docker run --rm)的容器在引擎重启时不再被强制删除。 moby/moby#46857
  • 实时恢复:实时恢复的容器在守护程序重新启动时将获得另一个健康检查启动周期。 moby/moby#47051
  • 容器健康状态刷新到磁盘的频率降低,减少闪存磨损。 moby/moby#47044
  • 确保网络名称是唯一的。 moby/moby#46251
  • 确保 overlay2 层元数据正确。 moby/moby#46471
  • 修复镜像拉取时的 Downloading 进度消息。 moby/moby#46515
  • 通过改进数据验证修复 NetworkConnectContainerCreate,并一次性返回所有验证错误。 moby/moby#46183
  • 修复 IPv6 和 ip6tables 启用时 com.docker.network.host_ipv4 选项的问题。 moby/moby#46446
  • 修复 containerd 停止时守护程序的 cleanupContainermoby/moby#46213
  • 修复 libnetwork 错误返回不正确的 HTTP 状态码的问题。 moby/moby#46146
  • 修复 images/json API 过滤器和镜像列表的各种问题。 moby/moby#46034
  • CIFS 卷现在正确解析 FQDN。 moby/moby#46863
  • 改进 userland-proxy-path 守护程序配置选项的验证。验证现在在守护程序启动期间进行,而不是在启动带有端口映射的容器时产生错误。 moby/moby#47000
  • 当网络模式是短网络 ID 时,设置容器接口的 MAC 地址。 moby/moby#46406
  • 在构建输出中显示之前对未使用的构建参数进行排序。 moby/moby#45917
  • docker image save tarball 输出现在符合 OCI 标准。 moby/moby#44598
  • 守护程序不再将 ACCEPT 规则添加到加密覆盖网络的 INPUT iptables 链末尾。根据防火墙配置,可能需要一条规则来允许传入的加密覆盖网络流量。 moby/moby#45280
  • 将带有扩展属性的层解包到不兼容的文件系统上现在将失败,而不是静默丢弃扩展属性。 moby/moby#45464
  • 更新守护程序 MTU 选项到 BridgeConfig 并在 Windows 上显示警告。 moby/moby#45887
  • 创建网络时验证 IPAM 配置。自动修复在此版本之前创建的 --ip-range 大于 --subnet 的网络。 moby/moby#45759
  • 仅连接到内部网络的容器现在将没有设置默认路由,从而使 connect 系统调用快速失败。 moby/moby#46603
  • containerd 镜像存储:为 pushpullsave 添加镜像事件。 moby/moby#46405
  • containerd 镜像存储:添加对拉取旧版 schema1 镜像的支持。 moby/moby#46513
  • containerd 镜像存储:添加对推送所有标签的支持。 moby/moby#46485
  • containerd 镜像存储:添加对注册表令牌的支持。 moby/moby#46475
  • containerd 镜像存储:添加对显示使用镜像的容器数量的支持。 moby/moby#46511
  • containerd 镜像存储:修复与 ONBUILDMAINTAINERHEALTHCHECK Dockerfile 指令相关的 bug。 moby/moby#46313
  • containerd 镜像存储:修复 Pulling from 进度消息。 moby/moby#46494
  • containerd 镜像存储:添加对通过带有 sha256: 前缀的截断 ID 引用镜像的支持。 moby/moby#46435
  • containerd 镜像存储:修复 docker images 默认显示中间层的问题。 moby/moby#46423
  • containerd 镜像存储:修复获取镜像时检查指定平台是否存在的问题。 moby/moby#46495
  • containerd 镜像存储:修复使用经典构建器时,多个 ADDCOPY 指令导致错误的问题。 moby/moby#46383
  • containerd 镜像存储:修复导入镜像时堆栈溢出错误。 moby/moby#46418
  • containerd 镜像存储:改进 docker pull 进度输出。 moby/moby#46412
  • containerd 镜像存储:推送镜像后打印标签、摘要和大小。 moby/moby#46384
  • containerd 镜像存储:删除 UpdateConfig 中的 panic。 moby/moby#46433
  • containerd 镜像存储:当镜像标签类似于摘要时,返回错误。 moby/moby#46492
  • containerd 镜像存储:docker image ls 现在显示正确的镜像创建时间和日期。 moby/moby#46719
  • containerd 镜像存储:修复处理用户命名空间设置的问题。 moby/moby#46375
  • containerd 镜像存储:添加对拉取所有标签(docker pull -a)的支持。 moby/moby#46618
  • containerd 镜像存储:使用镜像引用中的域名作为默认注册表身份验证域。 moby/moby#46779

打包更新

已移除

已弃用

  • 废弃 1.24 版之前的 API 版本。废弃通知
  • 废弃 docker searchIsAutomated 字段和 is-automated 过滤器。废弃通知
  • API:废弃 /images/{id}/json (docker image inspect) 的 ContainerContainerConfig 属性。 moby/moby#46939

已知限制

tar 文件的扩展属性

在此版本中,处理 tar 存档的代码已更改为更严格,并在写入扩展属性 (xattr) 失败时产生错误。macOS 的 tar 实现默认在创建 tar 文件时生成额外的扩展属性。这些属性前缀不是有效的 Linux xattr 命名空间前缀,这导致 Docker 尝试处理这些文件时出现错误。例如,如果您尝试使用带有 ADD Dockerfile 指令的 tar 文件,您可能会看到类似于以下内容的错误消息:

failed to solve: lsetxattr /sftp_key.ppk: operation not supported

与扩展属性验证相关的错误消息在 v25.0.1 中得到了改进,以包含更多上下文,但 Docker 无法处理这些文件的限制仍然存在。使用 macOS tar 默认参数创建的 tar 文件,当与 Docker 一起使用时将产生错误。

作为一种解决方法,如果您需要使用在 macOS 上生成的 tar 文件与 Docker,您可以选择以下方法:

  • 使用 macOS tar 命令的 --no-xattr 标志来剥离**所有**扩展属性。如果您想保留扩展属性,这不是一个推荐的选项。

  • 在 macOS 上安装并使用 gnu-tar 来创建 tarball,而不是默认的 tar 实现。要使用 Homebrew 安装 gnu-tar

    $ brew install gnu-tar
    

    安装后,将 gnu-tar 二进制文件添加到您的 PATH 中,例如通过更新您的 .zshrc 文件:

    $ echo 'PATH="/opt/homebrew/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zshrc
    $ source ~/.zshrc
    
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.