Docker Engine 25.0 发布说明

本页描述了 Docker Engine 25.0 的最新更改、新增内容、已知问题和修复。

关于以下内容的更多信息:

25.0.5

2024-03-19

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

安全

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

错误修复和功能增强

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

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

  • 无root权限: 修复 open /etc/docker/plugins: permission denied. moby/moby#47587

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

25.0.4

2024-03-07

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

错误修复和功能增强

  • 在 Windows 上为默认“nat”网络中的容器恢复 DNS 名称。 moby/moby#47490
  • 修复在与--checkpoint一起使用时docker start出现失败的情况 moby/moby#47466
  • 不对现有 swarm 网络强制执行新的验证规则 moby/moby#47482
  • 在主机与内部桥接网络上的容器之间恢复IP连接性。 moby/moby#47481
  • 修复在 v25.0 中引入的回归问题,该问题阻止了经典构建器在非 Linux 操作系统上添加 created 为 xattrs 的 tar 存档 moby/moby#47483
  • containerd 镜像存储:修复镜像拉取未输出 Pulling fs layer status moby/moby#47484
  • API:为保持向后兼容性,在使用旧客户端(API 版本 < v1.44)时,默认使只读挂载不递归。 moby/moby#47393
  • API: GET /images/{id}/json 如果镜像配置中缺少 Created 字段,则省略 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 套接字连接失败报告为 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 会失败。 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 上使用高于 1500 的 MTU 创建桥接网络的错误。 moby/moby#47308, moby/moby#47311

  • 修复一个容器无法通过internal网络通信的错误。 moby/moby#47303

  • 修复一个错误,该错误会忽略ipv6守护程序选项的值。 moby/moby#47310

  • 修复一个错误:尝试使用摘要修订安装拉取会导致 panic。 moby/moby#47323

  • 修复托管 containerd supervisor 中的潜在竞态条件。 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 里程碑:

安全

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

CVE组件修复版本严重性
CVE-2024-21626runc1.1.12高,CVSS 8.6
CVE-2024-23651构建工具包1.12.5高,CVSS 8.7
CVE-2024-23652构建工具包1.12.5高,CVSS 8.7
CVE-2024-23653构建工具包1.12.5高,CVSS 7.7
CVE-2024-23650构建工具包1.12.5Medium, CVSS 5.5
CVE-2024-24557Docker 引擎25.0.2Medium, 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
  • 修复一个阻止容器被重命名两次的错误。 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相关的问题,其中硬限制被提高,导致根据ulimits调整行为的程序消耗大量内存。 moby/moby#45534

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

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

    如果你在使用systemd v240或更高版本时遇到更高的ulimit问题, 考虑添加一个系统drop-inoverride文件来为你的设置配置ulimit 设置。The 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
  • 当指定Dockerfile文件名时,如果使用-f,并且也使用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
  • 修复守护进程的 cleanupContainer,如果 containerd 停止。 moby/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 规则附加到加密 overlay 网络的 INPUT iptables 链的末尾。根据防火墙配置,可能需要一条规则来允许传入的加密 overlay 网络流量。 moby/moby#45280
  • 将带有扩展属性的层解包到不兼容的文件系统上现在会失败,而不是默默地丢弃扩展属性。 moby/moby#45464
  • 更新守护程序MTU选项到BridgeConfig并在Windows上显示警告。 moby/moby#45887
  • 创建网络时验证IPAM配置。自动修复在此版本之前创建的网络,其中--ip-range大于--subnetmoby/moby#45759
  • 仅连接到内部网络的容器现在将不会设置默认路由,使 connect 系统调用快速失败。 moby/moby#46603
  • containerd 镜像存储:为 push, pull, 和 save 添加镜像事件。 moby/moby#46405
  • containerd 镜像存储:添加对拉取旧版 schema1 镜像的支持。 moby/moby#46513
  • containerd 镜像存储:添加支持推送所有标签。 moby/moby#46485
  • containerd 镜像存储:添加对注册表令牌的支持。 moby/moby#46475
  • containerd 镜像存储:添加支持以显示使用镜像的容器数量。 moby/moby#46511
  • containerd 镜像存储:修复与 Dockerfile 指令 ONBUILDMAINTAINERHEALTHCHECK 相关的错误。 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版本。 弃用通知
  • 弃用 IsAutomated 字段和 is-automated 过滤器用于 docker search弃用通知
  • API: 停用 ContainerContainerConfig 属性,改用 /images/{id}/jsondocker image inspect)。 moby/moby#46939

已知限制

压缩文件的扩展属性

在此版本中,处理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 上使用 Docker 生成的 tar 文件, 您可以选择:

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

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

    $ brew install gnu-tar
    

    安装完成后,将 gnu-tar Binaries添加到您的 PATH,例如通过更新您的 .zshrc 文件:

    $ echo 'PATH="/opt/homebrew/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zshrc
    $ source ~/.zshrc