Docker Engine 25.0 发布说明
本页面描述了 Docker Engine 25.0 版本的最新更改、新增功能、已知问题和修复。
有关更多信息,请参阅:
- 已弃用和已移除的功能,请参阅已弃用的引擎功能。
- 对引擎 API 的更改,请参阅引擎 API 版本历史。
25.0.5
2024-03-19有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
安全性
此版本包含对 CVE-2024-29018 的安全修复,该漏洞可能导致数据通过权威 DNS 服务器从“内部”网络泄露。
错误修复和增强
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 里程碑:
错误修复和增强
- 在 Windows 上的默认“nat”网络中恢复容器的 DNS 名称。 moby/moby#47490
- 修复
docker start与--checkpoint一起使用时失败的问题 moby/moby#47466 - 不要对现有 Swarm 网络强制执行新的验证规则 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:如果镜像配置中缺少
Created字段,GET /images/{id}/json会省略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 socket 连接失败时报告 API 版本协商失败。 moby/moby#47470
- API:在容器创建 API 请求中,当指定容器范围的 MAC 地址,但
NetworkMode名称或 ID 与NetworkSettings.Networks中使用的名称或 ID 不同时,保留提供的端点配置。 moby/moby#47510
打包更新
- Go 运行时升级到 1.21.8。 moby/moby#47503
- RootlessKit 升级到 v2.0.2。 moby/moby#47508
- Compose 升级到 v2.24.7。 docker/docker-ce-packaging#998
- Buildx 升级到 v0.13.0。 docker/docker-ce-packaging#997
25.0.3
2024-02-06有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
错误修复和增强
containerd 镜像存储:修复当内容存储中未找到清单时,
docker image history失败的 bug。 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 上无法创建 MTU 高于 1500 的桥接网络的 bug。 moby/moby#47308, moby/moby#47311
修复容器无法通过
internal网络通信的 bug。 moby/moby#47303修复
ipv6守护程序选项的值被忽略的 bug。 moby/moby#47310修复尝试使用摘要修订版安装拉取时导致崩溃的 bug。 moby/moby#47323
修复托管 containerd 监督器中潜在的竞争条件。 moby/moby#47313
修复
journald日志驱动程序的问题,该问题阻止了 systemd 255 版本正确跟踪容器日志。 moby/moby#47243seccomp:更新内置 seccomp 配置文件以包含内核 v5.17 - v6.7 中添加的系统调用,使配置文件与 containerd 使用的配置文件对齐。 moby/moby#47341
Windows:修复构建基于早于主机版本的 Windows 镜像时未缓存的问题。 moby/moby#47307, moby/moby#47337
打包更新
- 移除对 Ubuntu Lunar (23.04) 的支持。 docker/ce-packaging#986
25.0.2
2024-01-31有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
安全性
此版本包含以下影响 Docker Engine 及其组件的 CVE 的安全修复。
| CVE | 组件 | 修复版本 | 严重性 |
|---|---|---|---|
| CVE-2024-21626 | runc | 1.1.12 | 高危, CVSS 8.6 |
| CVE-2024-23651 | BuildKit | 1.12.5 | 高危, CVSS 8.7 |
| CVE-2024-23652 | BuildKit | 1.12.5 | 高危, CVSS 8.7 |
| CVE-2024-23653 | BuildKit | 1.12.5 | 高危, CVSS 7.7 |
| CVE-2024-23650 | BuildKit | 1.12.5 | 中危, CVSS 5.5 |
| CVE-2024-24557 | Docker Engine | 25.0.2 | 中危, CVSS 6.9 |
上述漏洞的潜在影响包括
- 未经授权访问主机文件系统
- 破坏构建缓存的完整性
- 在 CVE-2024-21626 的情况下,可能导致完全容器逃逸
有关此版本中解决的安全问题的更多信息,请参阅博客文章。有关每个漏洞的详细信息,请参阅相关的安全公告。
打包更新
- containerd 升级到 v1.6.28。
- containerd 升级到 v1.7.13(仅静态二进制文件)。 moby/moby#47280
- runc 升级到 v1.1.12。 moby/moby#47269
- Compose 升级到 v2.24.5。 docker/docker-ce-packaging#985
- BuildKit 升级到 v0.12.5。 moby/moby#47273
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 - 修复阻止容器两次重命名的 bug。 moby/moby#47196
- 修复检查容器时,其短 ID 添加到网络别名的问题。 moby/moby#47182
- 修复检测远程构建上下文是否为 Git 仓库的问题。 moby/moby#47136
- 修复 OCI 清单中层顺序的问题。 moby/moby#47150
- 修复传递
addr或ip挂载选项时卷挂载错误。 moby/moby#47185 - 改进由于属性名称命名空间不正确而无法设置扩展属性的错误消息。 moby/moby#47178
- Swarm:修复
start_interval未传递到容器配置的问题。 moby/moby#47163
打包更新
- Compose 升级到
2.24.2。 docker/docker-ce-packaging#981
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 产生问题,其中硬限制增加,导致根据 ulimit 调整其行为的程序消耗大量内存。 moby/moby#45534新设置使容器的行为与在主机上运行的程序相同,但可能会导致基于软限制做出不正确假设的程序出现异常行为。要获得以前的行为,可以将
LimitNOFILE=1048576。此更改目前仅影响使用 BuildKit 和
docker驱动程序时使用docker build创建的构建容器。未来版本的 containerd 也将使用此限制,这将导致此行为影响所有容器,而不仅仅是构建容器。如果您在 systemd v240 或更高版本中遇到更高的 ulimit 问题,请考虑添加系统
drop-in或override文件以配置您的设置的 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
为
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 - 添加一条错误消息,用于在使用
-f指定 Dockerfile 文件名,并且还使用stdin的情况。 docker/cli#4346 - 添加对
--network长格式中mac-address和link-local-ip字段的支持。 docker/cli#4419 - 添加对
docker container create和docker 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 - 通过改进数据验证修复
NetworkConnect和ContainerCreate,并一次性返回所有验证错误。 moby/moby#46183 - 修复 IPv6 和 ip6tables 启用时
com.docker.network.host_ipv4选项的问题。 moby/moby#46446 - 修复 containerd 停止时守护程序的
cleanupContainer。 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 savetarball 输出现在符合 OCI 标准。 moby/moby#44598- 守护程序不再将
ACCEPT规则添加到加密覆盖网络的INPUTiptables 链末尾。根据防火墙配置,可能需要一条规则来允许传入的加密覆盖网络流量。 moby/moby#45280 - 将带有扩展属性的层解包到不兼容的文件系统上现在将失败,而不是静默丢弃扩展属性。 moby/moby#45464
- 更新守护程序 MTU 选项到 BridgeConfig 并在 Windows 上显示警告。 moby/moby#45887
- 创建网络时验证 IPAM 配置。自动修复在此版本之前创建的
--ip-range大于--subnet的网络。 moby/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 镜像存储:修复与
ONBUILD、MAINTAINER和HEALTHCHECKDockerfile 指令相关的 bug。 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 镜像存储:修复使用经典构建器时,多个
ADD或COPY指令导致错误的问题。 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
打包更新
- API 升级到 v1.44。 moby/moby#45468
- Compose 升级到
2.24.1。 docker/docker-ce-packaging#980 - containerd 升级到 v1.7.12(仅静态二进制文件)。 moby/moby#47070
- Go 运行时升级到 1.21.6。 moby/moby#47053
- runc 升级到 v1.1.11。 moby/moby#47007
- BuildKit 升级到 v0.12.4。 moby/moby#46882
- Buildx 升级到 v0.12.1。 docker/docker-ce-packaging#979
已移除
- API:移除
GET /images/json和GET /images/{id}/json端点的 VirtualSize 字段。 moby/moby#45469 - 移除废弃的
devicemapper存储驱动程序。 moby/moby#43637 - 移除已废弃的编排器选项。 docker/cli#4366
- 移除对 Debian Upstart init 系统的支持。 moby/moby#45548, moby/moby#45551
- 移除
--oom-score-adjust守护程序选项。 moby/moby#45484 - 移除关于已废弃的
~/.dockercfg文件的警告。 docker/cli#4281 - 移除
logentries日志驱动程序。 moby/moby#46925
已弃用
- 废弃 1.24 版之前的 API 版本。废弃通知
- 废弃
docker search的IsAutomated字段和is-automated过滤器。废弃通知 - API:废弃
/images/{id}/json(docker image inspect) 的Container和ContainerConfig属性。 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 上生成的 tar 文件与 Docker,您可以选择以下方法:
使用 macOS
tar命令的--no-xattr标志来剥离**所有**扩展属性。如果您想保留扩展属性,这不是一个推荐的选项。在 macOS 上安装并使用
gnu-tar来创建 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