Docker Engine 25.0 发行说明
本页介绍了 Docker Engine 版本 25.0 的最新更改、新增功能、已知问题和修复。
有关以下内容的更多信息:
- 已弃用和已删除的功能,请参阅已弃用的引擎功能。
- 对 Engine API 的更改,请参阅 Engine API 版本历史记录。
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}/json
跟0001-01-01T00:00:00Z
对于 API 版本 <= 1.43。白鲸/白鲸#47387 - API:修复了导致 API 套接字连接失败改为报告 API 版本协商失败的回归。白鲸/白鲸#47470
- API:当指定了容器范围的 MAC 地址时,在容器创建 API 请求中保留提供的端点配置,但
NetworkMode
name 或 id 与NetworkSettings.Networks
.白鲸/白鲸#47510
打包更新
- 升级 Go 运行时至 1.21.8。白鲸/白鲸#47503
- 将 RootlessKit 升级到 v2.0.2。白鲸/白鲸#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
如果在 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修复了
ipv6
daemon 选项。白鲸/白鲸#47310修复了尝试使用 Digest 修订版安装拉取会导致 panic 的错误。白鲸/白鲸#47323
修复受管 containerd supervisor 中的潜在争用条件。白鲸/白鲸#47313
修复
journald
log 驱动程序阻止使用 systemd 版本 255 正确跟踪容器日志。白鲸/白鲸#47243seccomp:更新内置的 seccomp 配置文件,以包含在内核 v5.17 - v6.7 中添加的系统调用,以使配置文件与 containerd 使用的配置文件保持一致。白鲸/白鲸#47341
Windows:修复了在基于早于主机版本的Windows版本构建镜像时未使用缓存的问题。白鲸/白鲸 #47307, 白鲸/白鲸 #47337
打包更新
- 删除了对 Ubuntu Lunar (23.04) 的支持。docker/ce 打包 #986
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 的情况下,可能导致完全容器逃逸的场景
有关此版本中解决的安全问题的更多信息, 请参阅博客文章。 有关每个漏洞的详细信息,请参阅相关的安全公告:
打包更新
- 升级 containerd 至 v1.6.28。
- 将 containerd 升级到 v1.7.13(仅限静态Binaries)。白鲸/白鲸 #47280
- 升级 runc 至 v1.1.12。白鲸/白鲸 #47269
- 将 Compose 升级到 v2.24.5。docker/docker-ce-packaging的 #985
- 升级 BuildKit 至 v0.12.5。白鲸/白鲸 #47273
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
- 修复在传递
addr
或ip
mount 选项。白鲸/白鲸#47185 - 改进了与由于命名空间属性名称不正确而无法设置的扩展属性相关的错误消息。白鲸/白鲸#47178
- 虫群:修复
start_interval
未传递给容器配置。白鲸/白鲸#47163
打包更新
- 将 Compose 升级到
2.24.2
.docker/docker-ce-packaging的 #981
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-in
或override
文件配置 ulimit 设置。Flatcar Container Linux 文档有一篇很棒的文章详细介绍了这个主题。添加 OpenTelemetry 跟踪。白鲸/白鲸 #45652, 白鲸/白鲸 #45579
在 Linux 下添加对 CDI 设备的支持。moby/moby#45134、docker/cli#4510、moby/moby#46004
添加 healthchecks 在容器启动期间要使用的额外间隔。moby/moby#40894、docker/cli#4405、moby/moby#45965
添加
--log-format
flag 设置为dockerd
要控制日志记录格式:text(默认)或 JSON。白鲸/白鲸#45737添加了对递归只读挂载的支持。白鲸/白鲸#45278, 白鲸/白鲸#46037
添加了对根据时间戳过滤镜像的支持
docker image ls --filter=until=<timestamp>
.白鲸/白鲸#46577
错误修复和增强功能
- API:修复
ValidateRestartPolicy
.白鲸/白鲸 #46352 - API:更新
/info
endpoint 来使用 singleflight。白鲸/白鲸#45847 - 添加一条错误消息,用于使用
-f
,以及使用stdin
.docker/cli 的 #4346 - 添加对
mac-address
和link-local-ip
字段中--network
长格式。docker/cli #4419 - 添加对指定多个
--network
带有docker container create
和docker run
.白鲸/白鲸#45906 - 指定 IPv6 子网时,在网络上自动启用 IPv6。白鲸/白鲸#46455
- 添加了对通过 IPv6 传输的覆盖网络的支持。白鲸/白鲸#46790
- 配置重新加载现在更加可靠:如果在配置重新加载过程中出现错误,则不会应用任何配置更改。白鲸/白鲸#43980
- 实时还原:具有自动删除功能 (
docker run --rm
) 不再在引擎重新启动时被强制删除。白鲸/白鲸#46857 - 实时还原:现在,当守护程序重新启动时,实时还原的容器将获得另一个运行状况检查开始期。白鲸/白鲸#47051
- 容器运行状况刷新到磁盘的频率较低,从而减少了闪存存储的磨损。白鲸/白鲸#47044
- 确保网络名称是唯一的。白鲸/白鲸#46251
- 确保 overlay2 图层元数据正确无误。白鲸/白鲸#46471
- 修复
Downloading
镜像拉取的进度消息。白鲸/白鲸#46515 - 修复
NetworkConnect
和ContainerCreate
改进了数据验证,并一次返回所有验证错误。白鲸/白鲸#46183 - 修复
com.docker.network.host_ipv4
选项 IPv6 和 ip6tables 时。白鲸/白鲸#46446 - 修复守护进程的
cleanupContainer
如果 containerd 已停止。白鲸/白鲸#46213 - 修复 libnetwork 错误返回错误 HTTP 状态码的问题。白鲸/白鲸#46146
- 修复 images/json API 过滤器和镜像列表的各种问题。白鲸/白鲸#46034
- CIFS 卷现在可以正确解析 FQDN。白鲸/白鲸#46863
- 改进
userland-proxy-path
daemon 配置选项。验证现在发生在守护进程启动期间,而不是在使用 port-mapping 启动容器时产生错误。白鲸/白鲸#47000 - 当网络模式为短网络 ID 时,设置容器接口的 MAC 地址 moby/moby#46406
- 在生成输出中显示之前对未使用的生成参数进行排序。白鲸/白鲸 #45917
- 这
docker image save
tarball 输出现在符合 OCI 标准。白鲸/白鲸#44598 - 守护进程不再附加
ACCEPT
rules 的末尾INPUT
iptables 链。根据防火墙配置,可能需要一个规则来允许传入的加密覆盖网络流量。白鲸/白鲸 #45280 - 现在,将具有扩展属性的图层解压缩到不兼容的文件系统上将失败,而不是静默丢弃扩展属性。白鲸/白鲸#45464
- 将守护程序 MTU 选项更新为 BridgeConfig,并在 Windows 上显示警告。白鲸/白鲸#45887
- 在创建网络时验证 IPAM 配置。自动修复在此版本之前创建的网络,其中
--ip-range
大于--subnet
.白鲸/白鲸#45759 - 仅连接到内部网络的容器现在将没有默认路由设置,这使得
connect
syscall fail-fast 的 FAIL-FAST。白鲸/白鲸 #46603 - containerd image store:为
push
,pull
和save
.白鲸/白鲸#46405 - containerd 镜像存储:添加对拉取旧版 schema1 镜像的支持。白鲸/白鲸#46513
- containerd image store:添加对推送所有标签的支持。白鲸/白鲸 #46485
- containerd image store:添加对注册表令牌的支持。白鲸/白鲸#46475
- containerd image store:添加了对显示使用镜像的容器数量的支持。白鲸/白鲸#46511
- containerd 镜像存储:修复了与
ONBUILD
,MAINTAINER
和HEALTHCHECK
Dockerfile 说明。白鲸/白鲸#46313 - containerd 镜像存储:修复
Pulling from
进度消息。白鲸/白鲸#46494 - containerd 镜像存储:添加了对通过截断 ID 引用镜像的支持
sha256:
前缀。白鲸/白鲸#46435 - containerd 镜像存储:修复
docker images
默认情况下显示中间图层。白鲸/白鲸#46423 - containerd image store:修复了在获取镜像时检查指定平台是否存在的问题。白鲸/白鲸 #46495
- containerd 镜像存储:修复多个
ADD
或COPY
说明与 Classic Builder 一起使用。白鲸/白鲸#46383 - containerd image store:修复导入镜像时出现的堆栈溢出错误。白鲸/白鲸#46418
- containerd 镜像存储:改进
docker pull
progress 输出。白鲸/白鲸#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
打包更新
- 升级 API 至 v1.44。白鲸/白鲸 #45468
- 将 Compose 升级到
2.24.1
.docker/docker-ce-packaging的 #980 - 将 containerd 升级到 v1.7.12(仅限静态Binaries)。白鲸/白鲸#47070
- 升级 Go 运行时至 1.21.6。白鲸/白鲸#47053
- 升级 runc 至 v1.1.11。白鲸/白鲸#47007
- 升级 BuildKit 至 v0.12.4。白鲸/白鲸 #46882
- 升级 Buildx 至 v0.12.1。docker/docker-ce-packaging的 #979
删除
- API:删除
GET /images/json
和GET /images/{id}/json
端点。白鲸/白鲸#45469 - 移除已弃用
devicemapper
storage 驱动程序。白鲸/白鲸 #43637 - 删除已弃用的 Orchestrator 选项。docker/cli #4366
- 删除对 Debian Upstart init 系统的支持。白鲸/白鲸 #45548、白鲸/白鲸 #45551
- 删除
--oom-score-adjust
daemon 选项。白鲸/白鲸#45484 - 删除已弃用的警告
~/.dockercfg
文件。docker/cli #4281 - 删除
logentries
logging 驱动程序。白鲸/白鲸 #46925
荒废的
- 弃用 1.24 之前的 API 版本。弃用通知
- 废弃
IsAutomated
field 和is-automated
filter fordocker search
.弃用通知 - API:已弃用
Container
和ContainerConfig
的属性/images/{id}/json
(docker image inspect
).白鲸/白鲸#46939
已知限制
tar 文件的扩展属性
在该版本中,处理tar
档案已更改为更多
strict 并在写入扩展属性失败时产生错误
(xattr
).这tar
macOS 的实现会生成额外的扩展
属性。这些属性前缀不是
有效的 Linuxxattr
namespace 前缀,这会导致 Docker
尝试处理这些文件。例如,如果您尝试将 tar 文件与
一ADD
Dockerfile 指令中,您可能会看到类似于
以后:
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-tar
binary 发送到PATH
,例如 更新您的.zshrc
文件:$ echo 'PATH="/opt/homebrew/opt/gnu-tar/libexec/gnubin:$PATH"' >> ~/.zshrc $ source ~/.zshrc