Docker Engine 25.0 发布说明

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

有关更多信息:

25.0.5

2024-03-19

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

安全

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

Bug修复和增强

  • 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 denied. moby/moby#47587

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

25.0.4

2024-03-07

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

Bug fixes and enhancements

  • 在Windows上恢复默认“nat”网络中容器的DNS名称。 moby/moby#47490
  • 修复当与--checkpoint一起使用时docker start失败的问题 moby/moby#47466
  • 不要对现有的群集网络强制执行新的验证规则 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: GET /images/{id}/json 如果镜像配置中缺少 Created 字段,则省略 Created 字段(之前为 0001-01-01T00:00:00Z)。 moby/moby#47451
  • API: 在API版本 <= 1.43 中,为 GET /images/{id}/json 中的缺失 Created 字段填充 0001-01-01T00:00:00Zmoby/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里程碑:

Bug修复和增强功能

  • 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 @ 生成一个没有清单的索引的OCI存档。 moby/moby#47294

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

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

  • 修复了一个忽略ipv6守护进程选项值的错误。 moby/moby#47310

  • 修复了一个错误,该错误会导致尝试使用摘要修订版安装拉取时引发恐慌。 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的安全修复。

CVEComponentFix versionSeverity
CVE-2024-21626runc1.1.12High, CVSS 8.6
CVE-2024-23651BuildKit1.12.5High, CVSS 8.7
CVE-2024-23652BuildKit1.12.5High, CVSS 8.7
CVE-2024-23653BuildKit1.12.5High, CVSS 7.7
CVE-2024-23650BuildKit1.12.5Medium, CVSS 5.5
CVE-2024-24557Docker Engine25.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驱动程序创建的构建容器。未来版本的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

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

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

  • 添加支持基于时间戳过滤镜像的功能,使用 docker image ls --filter=until=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
  • 修复返回错误的HTTP状态码以处理libnetwork错误。 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大于--subnetmoby/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 指令相关的错误。 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}/json (docker image inspect)。 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上使用Docker生成的tar文件,您可以:

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

  • 在macOS上安装并使用gnu-tar来创建tarballs,而不是使用默认的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