Docker Engine 25.0 发行说明

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

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

25.0.5

2024-03-19

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

安全

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

错误修复和增强功能

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

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

打包更新

25.0.3

2024-02-06

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

错误修复和增强功能

  • containerd 镜像存储:修复了docker image history如果在 Content Store 中找不到清单,则会失败。白鲸/白鲸 #47348

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

    注意

    • 使用 Docker Engine 版本 25.0.0 创建的容器可能具有重复的 MAC 地址。 必须重新创建它们。
    • 使用 Docker 引擎版本 25.0.0 或 25.0.1 创建的具有用户定义的 MAC 地址的容器 在开始使用 Docker Engine 版本 25.0.2 时接收新的 MAC 地址。 还必须重新创建它们。
  • 修复docker save <image>@<digest>生成索引不带清单的 OCI 存档。白鲸/白鲸#47294

  • 修复了一个错误,该错误阻止在 RHEL 和 CentOS 7 上创建具有高于 1500 的 MTU 的网桥网络。白鲸/白鲸 #47308白鲸/白鲸 #47311

  • 修复了容器无法通过internal网络。白鲸/白鲸#47303

  • 修复了ipv6daemon 选项。白鲸/白鲸#47310

  • 修复了尝试使用 Digest 修订版安装拉取会导致 panic 的错误。白鲸/白鲸#47323

  • 修复受管 containerd supervisor 中的潜在争用条件。白鲸/白鲸#47313

  • 修复journaldlog 驱动程序阻止使用 systemd 版本 255 正确跟踪容器日志。白鲸/白鲸#47243

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

  • Windows:修复了在基于早于主机版本的Windows版本构建镜像时未使用缓存的问题。白鲸/白鲸 #47307白鲸/白鲸 #47337

打包更新

25.0.2

2024-01-31

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

安全

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

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-24557漏洞Docker 引擎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
  • 修复在传递addripmount 选项。白鲸/白鲸#47185
  • 改进了与由于命名空间属性名称不正确而无法设置的扩展属性相关的错误消息。白鲸/白鲸#47178
  • 虫群:修复start_interval未传递给容器配置。白鲸/白鲸#47163

打包更新

25.0.0

2024-01-19

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

注意

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

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

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

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

新增功能

  • 守护进程现在使用 systemd 的默认LimitNOFILE.在早期版本的 Docker Engine 的 Docker,此限制设置为infinity.这会导致 最新版本的 systemd 中,硬限制被增加,导致 根据 uLimits 调整行为以消耗高 内存量。白鲸/白鲸#45534

    新设置使容器的行为方式与运行在 主机,但可能会导致程序根据 soft limit 来表现不佳。要获得上述行为,您可以设置LimitNOFILE=1048576.

    此更改目前仅影响使用docker build当 BuildKit 与docker司机。的未来版本 containerd 也将使用此限制,这将导致此行为受到影响 所有容器,而不仅仅是构建容器。

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

  • 添加 OpenTelemetry 跟踪。白鲸/白鲸 #45652白鲸/白鲸 #45579

  • 在 Linux 下添加对 CDI 设备的支持。moby/moby#45134docker/cli#4510moby/moby#46004

  • 添加 healthchecks 在容器启动期间要使用的额外间隔。moby/moby#40894docker/cli#4405moby/moby#45965

  • 添加--log-formatflag 设置为dockerd要控制日志记录格式:text(默认)或 JSON。白鲸/白鲸#45737

  • 添加了对递归只读挂载的支持。白鲸/白鲸#45278白鲸/白鲸#46037

  • 添加了对根据时间戳过滤镜像的支持docker image ls --filter=until=<timestamp>.白鲸/白鲸#46577

错误修复和增强功能

  • API:修复ValidateRestartPolicy.白鲸/白鲸 #46352
  • API:更新/infoendpoint 来使用 singleflight。白鲸/白鲸#45847
  • 添加一条错误消息,用于使用-f,以及使用stdin.docker/cli 的 #4346
  • 添加对mac-addresslink-local-ip字段中--network长格式。docker/cli #4419
  • 添加对指定多个--network带有docker container createdocker run.白鲸/白鲸#45906
  • 指定 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-pathdaemon 配置选项。验证现在发生在守护进程启动期间,而不是在使用 port-mapping 启动容器时产生错误。白鲸/白鲸#47000
  • 当网络模式为短网络 ID 时,设置容器接口的 MAC 地址 moby/moby#46406
  • 在生成输出中显示之前对未使用的生成参数进行排序。白鲸/白鲸 #45917
  • docker image savetarball 输出现在符合 OCI 标准。白鲸/白鲸#44598
  • 守护进程不再附加ACCEPTrules 的末尾INPUTiptables 链。根据防火墙配置,可能需要一个规则来允许传入的加密覆盖网络流量。白鲸/白鲸 #45280
  • 现在,将具有扩展属性的图层解压缩到不兼容的文件系统上将失败,而不是静默丢弃扩展属性。白鲸/白鲸#45464
  • 将守护程序 MTU 选项更新为 BridgeConfig,并在 Windows 上显示警告。白鲸/白鲸#45887
  • 在创建网络时验证 IPAM 配置。自动修复在此版本之前创建的网络,其中--ip-range大于--subnet.白鲸/白鲸#45759
  • 仅连接到内部网络的容器现在将没有默认路由设置,这使得connectsyscall fail-fast 的 FAIL-FAST。白鲸/白鲸 #46603
  • containerd image store:为push,pullsave.白鲸/白鲸#46405
  • containerd 镜像存储:添加对拉取旧版 schema1 镜像的支持。白鲸/白鲸#46513
  • containerd image store:添加对推送所有标签的支持。白鲸/白鲸 #46485
  • containerd image store:添加对注册表令牌的支持。白鲸/白鲸#46475
  • containerd image store:添加了对显示使用镜像的容器数量的支持。白鲸/白鲸#46511
  • containerd 镜像存储:修复了与ONBUILD,MAINTAINERHEALTHCHECKDockerfile 说明。白鲸/白鲸#46313
  • containerd 镜像存储:修复Pulling from进度消息。白鲸/白鲸#46494
  • containerd 镜像存储:添加了对通过截断 ID 引用镜像的支持sha256:前缀。白鲸/白鲸#46435
  • containerd 镜像存储:修复docker images默认情况下显示中间图层。白鲸/白鲸#46423
  • containerd image store:修复了在获取镜像时检查指定平台是否存在的问题。白鲸/白鲸 #46495
  • containerd 镜像存储:修复多个ADDCOPY说明与 Classic Builder 一起使用。白鲸/白鲸#46383
  • containerd image store:修复导入镜像时出现的堆栈溢出错误。白鲸/白鲸#46418
  • containerd 镜像存储:改进docker pullprogress 输出。白鲸/白鲸#46412
  • containerd image store:打印推送镜像后的标签、摘要和大小。白鲸/白鲸 #46384
  • containerd 镜像存储:从UpdateConfig.白鲸/白鲸#46433
  • containerd image store:当 image 标签类似于摘要时返回错误。白鲸/白鲸#46492
  • containerd 镜像存储:docker image ls现在显示正确的镜像创建时间和日期。白鲸/白鲸#46719
  • containerd 镜像存储:修复了处理用户命名空间设置时出现的问题。白鲸/白鲸#46375
  • containerd 镜像存储:添加对拉取所有标签 (docker pull -a).白鲸/白鲸#46618
  • containerd 镜像存储:使用镜像引用中的域名作为默认注册表身份验证域。白鲸/白鲸#46779

打包更新

删除

荒废的

  • 弃用 1.24 之前的 API 版本。弃用通知
  • 废弃IsAutomatedfield 和is-automatedfilter fordocker search.弃用通知
  • API:已弃用ContainerContainerConfig的属性/images/{id}/json (docker image inspect).白鲸/白鲸#46939

已知限制

tar 文件的扩展属性

在该版本中,处理tar档案已更改为更多 strict 并在写入扩展属性失败时产生错误 (xattr).这tarmacOS 的实现会生成额外的扩展 属性。这些属性前缀不是 有效的 Linuxxattrnamespace 前缀,这会导致 Docker 尝试处理这些文件。例如,如果您尝试将 tar 文件与 一ADDDockerfile 指令中,您可能会看到类似于 以后:

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

与扩展属性验证相关的错误消息已改进为 在 v25.0.1 中包含更多上下文,但 Docker 中的限制为 无法处理文件。使用 macOS 创建的 Tar 文件tar当 tar 文件与 Docker。

解决方法是,如果您需要将 tar 文件与 macOS 上生成的 Docker 一起使用, 您可以:

  • 使用--no-xattr标志tar命令去除所有 扩展属性。如果要保留扩展属性,则不是 推荐选项。

  • 安装和使用gnu-tar在 macOS 上创建 tarball,而不是 违约tar实现。安装gnu-tar使用 Homebrew:

    $ brew install gnu-tar
    

    安装后,添加gnu-tarbinary 发送到PATH,例如 更新您的.zshrc文件:

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