Docker 引擎 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,则请求会被转发。 莫比/莫比#47589

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

  • 无根:修复open /etc/docker/plugins: permission denied莫比/莫比#47587

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

25.0.4

2024-03-07

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

错误修复和增强功能

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

包装更新

25.0.3

2024-02-06

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

错误修复和增强功能

  • docker image historycontainerd 映像存储:修复了在内容存储中找不到清单时会失败的 错误。莫比/莫比#47348

  • 确保容器重启时不会恢复生成的 MAC 地址,但会保留配置的 MAC 地址。 莫比/莫比#47304

    笔记

    • 使用 Docker Engine 版本 25.0.0 创建的容器可能具有重复的 MAC 地址。它们必须被重新创建。
    • 使用 Docker 引擎版本 25.0.0 或 25.0.1 创建的具有用户定义 MAC 地址的容器在使用 Docker 引擎版本 25.0.2 启动时会收到新的 MAC 地址。它们也必须被重新创建。
  • 修复了docker save <image>@<digest>生成带有索引但没有清单的 OCI 存档的问题。 莫比/莫比#47294

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

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

  • 修复了守护进程选项的值被忽略的错误ipv6莫比/莫比#47310

  • 修复了尝试使用摘要修订版安装拉动会导致恐慌的错误。 莫比/莫比#47323

  • 修复托管 Containerd Supervisor 中潜在的竞争状况。 莫比/莫比#47313

  • journald修复了日志驱动程序导致 systemd 版本 255 无法正确跟踪容器日志的 问题。moby /moby47243

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

  • Windows:修复基于早于主机版本的 Windows 版本构建映像时不使用缓存的问题。 莫比/莫比#47307 , 莫比/莫比#47337

包装更新

25.0.2

2024-01-31

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

安全

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

CVE成分修复版本严重性
CVE-2024-21626朗克1.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.5中,CVSS 5.5
CVE-2024-24557Docker引擎25.0.2中,CVSS 6.9

上述漏洞的潜在影响包括:

  • 未经授权访问主机文件系统
  • 损害构建缓存的完整性
  • 就 CVE-2024-21626 而言,这种情况可能会导致整个容器逃逸

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

包装更新

25.0.1

2024-01-23

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

错误修复和增强功能

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

包装更新

25.0.0

2024-01-19

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

笔记

在 Docker Engine 的早期版本中,递归挂载(子挂载)始终会挂载为可写,即使指定只读挂载也是如此。对于在内核版本 5.12 或更高版本上运行的主机,此行为在 v25.0.0 中已更改。现在,只读绑定挂载默认情况下是递归只读的

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

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

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

新的

  • 该守护进程现在使用 systemd 的默认LimitNOFILE.在 Docker Engine 的早期版本中,此限制设置为infinity.这会导致最新版本的 systemd 出现问题,其中硬限制增加,导致基于 ulimit 调整其行为的程序消耗大量内存。 莫比/莫比#45534

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

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

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

  • 添加 OpenTelemetry 跟踪。 莫比/莫比#45652 , 莫比/莫比#45579

  • 添加对 Linux 下 CDI 设备的支持。 莫比/莫比#45134 , 泊坞窗/cli#4510 , 莫比/莫比#46004

  • 添加一个额外的时间间隔,供容器启动期间运行状况检查使用。 莫比/莫比#40894 , 泊坞窗/cli#4405 , 莫比/莫比#45965

  • 添加一个--log-format标志来dockerd控制日志记录格式:文本(默认)或 JSON。 莫比/莫比#45737

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

  • 添加对基于时间戳过滤图像的支持docker image ls --filter=until=<timestamp>莫比/莫比#46577

错误修复和增强功能

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

包装更新

已删除

已弃用

  • 弃用 1.24 之前的 API 版本。 弃用通知
  • 弃用IsAutomated字段并is-automated过滤docker search. 弃用通知
  • API:弃用( )Container及其ContainerConfig属性。 莫比/莫比#46939/images/{id}/jsondocker image inspect

已知的限制

tar 文件的扩展属性

在此版本中,处理档案的代码tar变得更加严格,并且在无法写入扩展属性 ( xattr) 时会产生错误。 macOS 的实现tar在创建 tar 文件时默认生成附加扩展属性。这些属性前缀不是有效的 Linuxxattr命名空间前缀,这会在 Docker 尝试处理这些文件时导致错误。例如,如果您尝试将 tar 文件与ADDDockerfile 指令一起使用,您可能会看到类似于以下内容的错误消息:

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

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

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

  • 使用--no-xattrmacOStar命令的标志来go除所有扩展属性。如果您想保留扩展属性,则不建议选择此选项。

  • 安装并用于gnu-tar在 macOS 上创建 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