Docker Engine 25.0 发布说明
本页描述了 Docker Engine 25.0 的最新更改、新增内容、已知问题和修复。
关于以下内容的更多信息:
- 已弃用和移除的功能,请参见 已弃用的引擎功能。
- 引擎 API 的变更,请参阅 引擎 API 版本历史。
25.0.5
2024-03-19关于本次版本中所有拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:
安全
此版本包含针对CVE-2024-29018的安全修复,该漏洞可能导致通过权威DNS服务器从“内部”网络泄露数据。
错误修复和功能增强
CVE-2024-29018: 对仅连接到“internal”网络的容器,不要将请求转发到外部DNS服务器。此前,如果主机的DNS服务器运行在环回地址上(如systemd的127.0.0.53),请求会被转发。 moby/moby#47589
插件:修复在 UserNS 中运行时挂载 /etc/hosts 的问题。 moby/moby#47588
无root权限: 修复
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
- 修复在与
--checkpoint一起使用时docker start出现失败的情况 moby/moby#47466 - 不对现有 swarm 网络强制执行新的验证规则 moby/moby#47482
- 在主机与内部桥接网络上的容器之间恢复IP连接性。 moby/moby#47481
- 修复在 v25.0 中引入的回归问题,该问题阻止了经典构建器在非 Linux 操作系统上添加 created 为
xattrs的 tar 存档 moby/moby#47483 - containerd 镜像存储:修复镜像拉取未输出
Pulling fs layer statusmoby/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 的情况下,使用
0001-01-01T00:00:00Z填充GET /images/{id}/json中缺失的Created字段。 moby/moby#47387 - API:修复一个回归问题,该问题导致 API 套接字连接失败报告为 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会失败。 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 上使用高于 1500 的 MTU 创建桥接网络的错误。 moby/moby#47308, moby/moby#47311
修复一个容器无法通过
internal网络通信的错误。 moby/moby#47303修复一个错误,该错误会忽略
ipv6守护程序选项的值。 moby/moby#47310修复一个错误:尝试使用摘要修订安装拉取会导致 panic。 moby/moby#47323
修复托管 containerd supervisor 中的潜在竞态条件。 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 里程碑:
安全
此版本包含针对以下 CVE 的安全修复, 这些 CVE 影响 Docker Engine 及其组件。
| CVE | 组件 | 修复版本 | 严重性 |
|---|---|---|---|
| CVE-2024-21626 | runc | 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 | Medium, CVSS 5.5 |
| CVE-2024-24557 | Docker 引擎 | 25.0.2 | Medium, CVSS 6.9 |
以上漏洞的潜在影响包括:
- 未经授权访问主机文件系统
- 破坏构建缓存的完整性
- 在CVE-2024-21626的情况下,可能导致完全的容器逃逸
有关本次发布解决的安全问题的更多信息,请参阅 博客文章。 有关每个漏洞的详细信息,请参阅相关安全公告:
软件包更新
- 将 containerd 升级到 v1.6.28。
- 仅升级 containerd 的静态Binaries到 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 - 修复一个阻止容器被重命名两次的错误。 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相关的问题,其中硬限制被提高,导致根据ulimits调整行为的程序消耗大量内存。 moby/moby#45534新设置使容器的行为与在主机上运行的程序相同,但可能会导致基于软限制做出错误假设的程序出现异常。若要获取以前的行为,可以设置
LimitNOFILE=1048576。此更改目前仅影响使用 BuildKit 并带有
docker驱动程序时,使用docker build创建的构建容器。containerd 的未来版本也将使用此限制,这将导致此行为影响所有容器,而不仅仅是构建容器。如果你在使用systemd v240或更高版本时遇到更高的ulimit问题, 考虑添加一个系统
drop-in或override文件来为你的设置配置ulimit 设置。The 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 - 当指定Dockerfile文件名时,如果使用
-f,并且也使用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 - 修复守护进程的
cleanupContainer,如果 containerd 停止。 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规则附加到加密 overlay 网络的INPUTiptables 链的末尾。根据防火墙配置,可能需要一条规则来允许传入的加密 overlay 网络流量。 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 镜像存储:修复与 Dockerfile 指令
ONBUILD、MAINTAINER和HEALTHCHECK相关的错误。 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(仅静态Binaries)。 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初始化系统的支持。 moby/moby#45548, moby/moby#45551
- 移除
--oom-score-adjust守护进程选项。 moby/moby#45484 - 移除对已弃用的
~/.dockercfg文件的警告。 docker/cli#4281 - 移除
logentries日志驱动。 moby/moby#46925
已弃用
- 弃用早于1.24的API版本。 弃用通知
- 弃用
IsAutomated字段和is-automated过滤器用于docker search。 弃用通知 - API: 停用
Container和ContainerConfig属性,改用/images/{id}/json(docker image inspect)。 moby/moby#46939
已知限制
压缩文件的扩展属性
在此版本中,处理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标志来移除所有扩展属性。如果您想保留扩展属性,这不是一个推荐的选项。安装并使用
gnu-tar在 macOS 上创建 tarballs,而不是默认的tar实现。要使用 Homebrew 安装gnu-tar:$ brew install gnu-tar安装完成后,将
gnu-tarBinaries添加到您的PATH,例如通过更新您的.zshrc文件:$ echo 'PATH="/opt/homebrew/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zshrc $ source ~/.zshrc