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

  • rootless:修复 .白鲸/白鲸#47587open /etc/docker/plugins: permission denied

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

25.0.4

2024-03-07

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

错误修复和增强功能

打包更新

25.0.3

2024-02-06

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

错误修复和增强功能

  • containerd image store:修复了在 Content Store 中找不到清单时会失败的错误。白鲸/白鲸 #47348docker image history

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

    注意

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

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

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

  • 修复了忽略 daemon 选项的值的错误。白鲸/白鲸#47310ipv6

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

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

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

  • 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
  • 修复了未通过配置设置时在构建期间无法正常工作的问题。白鲸/白鲸#47192host-gateway-ip
  • 修复了阻止容器重命名两次的错误。白鲸/白鲸#47196
  • 修复了导致在检查容器时将其短 ID 添加到其网络别名的问题。白鲸/白鲸#47182
  • 修复了检测远程构建上下文是否为 Git 存储库时出现的问题。白鲸/白鲸#47136
  • 修复 OCI 清单中的层顺序问题。白鲸/白鲸#47150
  • 修复传递 or 挂载选项时的卷挂载错误。白鲸/白鲸#47185addrip
  • 改进了与由于命名空间属性名称不正确而无法设置的扩展属性相关的错误消息。白鲸/白鲸#47178
  • Swarm:修复了未传递给容器配置的问题。白鲸/白鲸#47163start_interval

打包更新

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 的默认 .在早期版本的 Docker Engine 的 Docker,此限制已设置为 。这会导致 最新版本的 systemd 中,硬限制被增加,导致 根据 uLimits 调整行为以消耗高 内存量。白鲸/白鲸#45534LimitNOFILEinfinity

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

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

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

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

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

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

  • 添加一个标志来控制日志记录格式:text (default) 或 JSON。白鲸/白鲸#45737--log-formatdockerd

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

  • 添加了对使用 .白鲸/白鲸#46577docker image ls --filter=until=<timestamp>

错误修复和增强功能

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

打包更新

删除

荒废的

  • 弃用 1.24 之前的 API 版本。弃用通知
  • 弃用 field 和 filter for .弃用通知IsAutomatedis-automateddocker search
  • API:弃用 () 和属性。白鲸/白鲸#46939ContainerContainerConfig/images/{id}/jsondocker image inspect

已知限制

tar 文件的扩展属性

在此版本中,处理档案的代码已更改为 more strict 并在写入扩展属性失败时产生错误 ().macOS 的实现会生成额外的扩展 属性。这些属性前缀不是 有效的 Linux 命名空间前缀,这会导致 Docker 尝试处理这些文件。例如,如果您尝试将 tar 文件与 Dockerfile 指令中,您可能会看到类似于 以后:tarxattrtarxattrADD

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

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

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

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

  • install 并使用在 macOS 上创建 tarball,而不是 default 实现。要使用 Homebrew 进行安装:gnu-tartargnu-tar

    $ brew install gnu-tar
    

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

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