Docker Engine 版本 27 版本说明
本页面描述了 Docker Engine 版本 27 的最新更改、新增功能、已知问题和修复。
有关以下内容的更多信息:
- 有关已弃用和已删除功能,请参阅已弃用 Engine 功能。
- 有关 Engine API 的更改,请参阅Engine API 版本历史。
27.5
Docker Engine 版本 27.5 发布的版本说明。
27.5.1
2025-01-22有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
Bug 修复和增强功能
- 修复了默认桥接初始化失败后可能持续阻止守护进程启动的问题。 moby/moby#49307
- 添加了
DOCKER_IGNORE_BR_NETFILTER_ERROR
环境变量。将其设置为1
允许在无法加载br_netfilter
的主机上运行。一些功能将无法工作,包括禁用桥接网络中的容器间通信。如果用户空间代理被禁用,将无法在同一网络中的另一个容器访问某个容器已发布的端口。 moby/moby#49306
打包更新
- 将 Go 运行时更新到 1.22.11(修复 CVE-2024-45341、CVE-2024-45336)。moby/moby#49312, docker/docker-ce-packaging#1147, docker/cli#5762
- 将 RootlessKit 更新到 v2.3.2 以支持
passt
>= 2024_10_30.ee7d0b6。 moby/moby#49304 - 将 Buildx 更新到 v0.20.0。 docker/docker-ce-packaging#1149
27.5.0
2025-01-13有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
Bug 修复和增强功能
- containerd 镜像存储:修复通过 tarball 将构建上下文传递给
/build
端点的问题。 moby/moby#49194 - 没有指定
keepStorage
值的构建器垃圾回收策略现在会按预期继承defaultKeepStorage
限制。 moby/moby#49137 - 在守护进程启动期间保留网络标签。 moby/moby#49200
- 修复删除容器时潜在的竞态条件错误。 moby/moby#49239
Go SDK
pkg/sysinfo
:弃用NumCPU
。此实用工具的行为与runtime.NumCPU
相同。 moby/moby#49247pkg/fileutils
:弃用GetTotalUsedFds
:此函数仅在内部使用,将在下个版本中移除。 moby/moby#49209pkg/ioutils
:弃用BytesPipe
,NewBytesPipe
,ErrClosed
,WriteCounter
,NewWriteCounter
,NewReaderErrWrapper
,NopFlusher
,NopWriter
,NopWriteCloser
。它们仅在内部使用,将在下个版本中移除。 moby/moby#49246, moby/moby#49255pkg/reexec
:此包已弃用并已移至单独的模块。请改用github.com/moby/sys/reexec
。 moby/moby#49135
打包更新
- 将 containerd 更新到 v1.7.25 moby/moby#49253
- 将
runc
更新到 v1.2.4 moby/moby#49243 - 将 BuildKit 更新到 v0.18.2 moby/moby#48949
- 将 Compose 更新到 v2.32.2 docker/docker-ce-packaging#1140
27.4
Docker Engine 27.4 版本的发布说明。
27.4.1
2024-12-18有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
Bug 修复和增强功能
- 修复未配置 OTel 时内存分配过多的问题。 moby/moby#49079
- 当守护程序启动时,如果
bridge-nf-call-iptables
或bridge-nf-call-ip6tables
被禁用,则docker info
命令和相应的GET /info
API 端点不再包含警告。现在会在需要时尝试加载br_netfilter
内核模块,这使得这些警告不再准确。 moby/moby#49090 - 尝试在需要时加载包括
ip6_tables
和br_netfilter
在内的内核模块,使用一种可能在 Docker-in-Docker 容器内成功的方法。 moby/moby#49043 - 修复一个可能导致 iptables
DOCKER FILTER
链在失败时未被清理的错误。 moby/moby#49110
打包更新
- 将 Compose 更新到 v2.32.1。 docker/docker-ce-packaging#1130
- 将 Buildx 更新到 v0.19.3。 docker/docker-ce-packaging#1132
- 将 runc(仅静态二进制文件)更新到 v1.2.3 moby/moby#49085
27.4.0
2024-12-09有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
API
- 启用
manifests
选项的GET /images/json
现在保留了清单索引中清单出现的原始顺序。 moby/moby#48712
Bug 修复和增强功能
- 使用
jsonfile
或local
日志驱动程序读取日志时,尝试读取或解析底层日志文件时出现的任何错误都将导致跳过文件的其余部分并移动到下一个日志文件(如果存在),而不是向客户端返回错误并关闭流。这些错误可在 Docker 守护程序日志中查看,并在配置了跟踪时导出到跟踪中。 moby/moby#48842 - 读取日志文件时,现在只在需要时解压压缩的日志文件,而不是在开始日志流之前解压所有文件。 moby/moby#48842
- 修复了一个问题,该问题导致当内核的
br_netfilter
模块未加载和启用时,在禁用userland-proxy
的情况下,桥接网络上一个容器发布的端口无法从同一网络上的另一个容器访问。现在,当创建禁用用户空间代理的网络时,守护程序将尝试加载该模块并启用bridge-nf-call-iptables
或bridge-nf-call-ip6tables
。 moby/moby#48685 - 修复了
bridge
和br_netfilter
内核模块加载的问题。 moby/moby#48966 - containerd 镜像存储:修复了当使用 containerd 快照器和大量构建/镜像时,Docker 守护程序因“context deadline exceeded error”而无法完全启动的问题。 moby/moby#48954
- containerd 镜像存储:修复了部分拉取的镜像未被垃圾回收的问题。 moby#48910, moby/moby#48957
- containerd 镜像存储:修复了
docker image inspect
在RepoDigests
中输出重复引用的问题。 moby/moby#48785 - containerd 镜像存储:修复了在 HTTPS 请求因非 TLS 相关错误而失败时无法连接到某些不安全仓库的问题。 moby/moby#48758
- containerd 镜像存储:删除了在标记非悬空镜像时出现的令人困惑的警告日志。 moby/moby#49010
- containerd 镜像存储:在
docker image ls --tree
中不为名称添加下划线。 docker/cli#5519 - containerd 镜像存储:将
docker image ls --tree
命令中USED
列的名称更改为IN USE
。 docker/cli#5518 dockerd-rootless-setuptool.sh install --force
现在忽略 RootlessKit 错误 moby/moby#48695- 对于分配给桥接网络所属网桥的地址,禁用 IPv6 重复地址检测 (DAD)。 moby/moby#48684
- 移除了 BuildKit 初始化超时。 moby/moby#48963
- 在 ZFS 上删除数据集时忽略“dataset does not exist”错误。 moby/moby#48968
- 客户端:防止空闲连接泄漏文件描述符 (FDs)。 moby/moby#48764
- 修复通过
--mount
选项创建的匿名卷未被标记为匿名的问题。 moby/moby#48755 - 在启用 live-restore 的守护程序重启后,确保 iptables 跳转到
DOCKER-USER
链位于其他规则之前。 moby/moby#48714 - 修复 OTel meters 可能导致的内存泄漏问题。 moby/moby#48693
- 为每个镜像存储创建独立的构建历史数据库。 moby/moby#48688
- 修复在紧密循环中进行 DNS 解析时导致内存使用过多的问题。 moby/moby#48840
- 修复了在
docker run
期间无法取消镜像拉取的问题。 docker/cli#5654 - 如果凭据未更改,
docker login
和docker logout
命令不再更新配置文件。 docker/cli#5569 - 优化
docker stats
以减少闪烁问题。 docker/cli#5588, docker/cli#5635 - 修复无法访问的插件路径,导致插件无法被检测到。 docker/cli#5652
- 在 Cobra 生成的 Shell 补全中添加对
events --filter
的支持。 docker/cli#5614 - 修复
events --filter daemon=
的 Bash 补全。 docker/cli#5563 - 改进针对
docker rm
命令的容器 Shell 补全。 docker/cli#5540 - 添加对
--platform
标志的 Shell 补全支持。 docker/cli#5540 - 无根模式:通过容器设备接口 (CDI) 集成,使
/etc/cdi
和/var/run/cdi
可访问。 moby/moby#49027
已移除
- 弃用
Daemon.Exists()
和Daemon.IsPaused()
。这些函数已不再使用,并且将在下个版本中移除。 moby/moby#48719 - 弃用
container.ErrNameReserved
和container.ErrNameNotReserved
。 moby/moby#48697 - 弃用
pkg/platform
- 此包仅在内部使用,并且将在下个版本中移除。 moby/moby#48863 - 弃用
RepositoryInfo.Class
。此字段已不再使用,并且将在下个版本中移除。 moby/moby#49013 - Go SDK:修复对
cli/command.ConfigureAuth()
的弃用,该函数自 v27.2.1 版本起已被弃用。 docker/cli#5552 - Go SDK:弃用
cli.Errors
类型,优先使用 Go 的errors.Join
。 docker/cli#5548
打包更新
- 将 Go 运行时更新到 1.22.10。 moby/moby#49026, docker/cli#5669, docker/docker-ce-packaging#1120。
- 将 Compose 更新到 v2.31.0。 docker/docker-ce-packaging#1100
- 将 BuildKit 更新到 v0.17.3。 moby/moby#49024
- 将 Buildx 更新到 v0.19.1。 docker/docker-ce-packaging#1115
- 将 containerd 更新到 v1.7.24。 moby/moby#48934
- 将 containerd (仅静态二进制文件) 更新到 v1.7.24。 moby/moby#48919
- 将 runc 更新到 v1.2.2。 moby/moby#48919
27.3
Docker Engine 27.3 版本的发布说明。
27.3.1
2024-09-20有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
Bug 修复和增强功能
- CLI:修复命令执行指标导出不正确的问题。 docker/cli#5457
打包更新
- 将 Compose 更新到 v2.29.7
27.3.0
2024-09-19有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
Bug 修复和增强功能
- containerd 镜像存储:修复
docker image prune -a
命令在处理被通过摘要引用启动的容器使用的镜像时,会取消标记这些镜像的问题。 moby/moby#48488 - 在守护进程选项中添加
--feature
标志。 moby/moby#48487 - 更新了对
--gpus=0
标志的处理方式,以与 NVIDIA Container Runtime 保持一致。 moby/moby#48483 - 支持 WSL2 镜像模式网络中使用接口
loopback0
处理来自 Windows 主机的包。 moby/moby#48514 - 修复了在使用
--iptables=false
和--ip6tables=true
(默认值) 运行 Docker,且主机防火墙对转发包有 DROP 规则,并且通常未加载br_netfilter
内核模块时,容器在 IPv4 桥接网络上无法通信的问题。 moby/moby#48511 - CLI:修复了在没有传入参数/卷时,
docker volume update
命令会导致 CLI 崩溃的问题。 docker/cli#5426 - CLI:修复在 Windows 的 WSL 环境中运行 CLI 时,指标报告不正确的问题。 docker/cli#5432
打包更新
- 将 containerd (仅静态二进制文件) 更新到 v1.7.22 moby/moby#48468
- 将 Buildkit 更新到 v0.16.0
- 将 Compose 更新到 v2.29.6
- 将 Buildx 更新到 v0.17.1
27.2
Docker Engine 27.2 版本的发布说明。
27.2.1
2024-09-09Bug 修复和增强功能
- containerd 镜像存储:修复非容器镜像在
docker image ls
输出中被隐藏的问题。 moby/moby#48402 - containerd 镜像存储:改进当镜像平台不匹配时
docker pull
的错误消息。 moby/moby#48415 - CLI:修复了导致
docker login
未从传入的注册表地址中移除仓库名的问题,从而导致凭据存储在错误的键下。 docker/cli#5385 - CLI:修复了在等待用户认证时,如果 CLI 进程被挂起然后恢复,有时会导致浏览器登录流程失败的问题。 docker/cli#5376
- CLI:如果非交互式调用
docker login
时使用了--password
或--password-stdin
但没有使用--user
,现在会返回错误而不是挂起。 docker/cli#5402
打包更新
- 将 runc 更新至 v1.1.14,其中包含对 CVE-2024-45310 的修复。 moby/moby#48426
- 将 Go runtime 更新至 1.22.7。 moby/moby#48433, docker/cli#5411, docker/docker-ce-packaging#1068
27.2.0
2024-08-27有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
- docker/cli,27.2.0 里程碑
- moby/moby,27.2.0 里程碑
- 已弃用和移除的功能,请参阅 已弃用功能。
- Engine API 的变更,请参阅 API 版本历史。
新增
本版本中的新功能包括
设备码登录
本版本新增了使用设备码登录(device code login)对 Docker Hub 进行身份验证的支持。
您仍然可以使用旧的用户名和密码或访问令牌登录方式,但设备码登录(device code login)更安全,并且无需您在 CLI 中输入密码。


若要使用旧方式,请使用 `docker login -u
`docker image ls` 的多平台支持
实验性功能
这是实验性功能,随时可能变更,且不保证向后兼容性。启用 containerd 镜像存储后,`docker image ls` 命令(或简称 `docker images`)现在支持 `--tree` 标志,该标志会显示镜像是否为多平台镜像。
API
`GET /images/json` 响应现在包含 `Manifests` 字段,其中包含镜像索引中包含的子清单(sub-manifests)信息。这包括特定平台的清单和构建证明(build attestations)等信息。
仅当请求将 `manifests` 查询参数设置为 `true` 时,才会填充此新字段。
实验性功能
这是实验性功能,随时可能变更,且不保证向后兼容性。
Bug 修复和增强功能
- CLI:修复通过 SSH 使用远程上下文时,CLI 在连接远程主机时会分配伪终端(pseudo-TTY),这在极少数情况下会导致问题。 docker/cli#5351
- 修复了一个问题,该问题阻止了创建 `--ip-range` 结束在 64 位边界上的网络。 moby/moby#48326
- CLI:`docker ps` 命令在端口绑定中显示的 IPv6 地址现在用方括号括起来。 docker/cli#5365
- containerd 镜像存储:修复在解包镜像失败时 `docker load` 命令提前退出的错误。 moby/moby#48376
- containerd 镜像存储:修复 `docker pull` 后之前的镜像未能作为悬空(dangling)镜像保留的问题。 moby/moby#48380
打包更新
- 将 BuildKit 更新至 v0.15.2。 moby/moby#48341
- 将 Compose 更新至 v2.29.2。 docker/docker-ce-packaging#1050
- 将 containerd 更新至 v1.7.21。 moby/moby#48383, docker/containerd-packaging#389
已知问题
- Docker CLI 中通过注册表(registry)进行身份验证(使用 `docker login [registry address]` 命令)时存在一个已知问题:如果提供的注册表地址包含仓库/镜像名称(例如 `docker login index.docker.io/docker/welcome-to-docker`),则仓库部分(`docker/welcome-to-docker`)不会被规范化(normalized),导致凭据存储不正确,从而使得后续从该注册表拉取镜像(例如 `docker pull index.docker.io/docker/welcome-to-docker`)时无法进行身份验证。为避免此问题,在运行 `docker login` 命令时,注册表地址中不要包含任何多余的后缀。
注意
在 `docker login` 命令中使用包含 URL 路径段的地址不是文档中说明的使用场景,因此不受支持。建议的使用方式是仅指定注册表主机名,可选择性地指定端口,作为 `docker login` 的地址。
27.1
Docker Engine 27.1 版本的发布说明。
27.1.2
2024-08-13有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
- docker/cli,27.1.2 里程碑
- moby/moby,27.1.2 里程碑
- 已弃用和移除的功能,请参阅 已弃用功能。
- Engine API 的变更,请参阅 API 版本历史。
Bug 修复和增强功能
- 修复了一个回归问题,该问题可能导致在使用大型 Dockerfile 进行构建时出现 `ResourceExhausted desc = grpc: received message larger than max` 错误。 moby/moby#48245
- CLI:修复 `docker attach` 命令打印不必要的 `context cancelled` 错误消息的问题。 docker/cli#5296
- CLI:修复 `docker attach` 命令在收到 `SIGINT` 时会直接退出,而不是将信号转发到容器并等待其退出的问题。 docker/cli#5302
- CLI:修复 `--device-read-bps` 和 `--device-write-bps` 选项不生效的问题。 docker/cli#5339
- CLI:修复在某些情况下运行插件时发生的 panic 问题。 docker/cli#5337
打包更新
- 将 BuildKit 更新至 v0.15.1。 moby/moby#48246
- 将 Buildx 更新至 v0.16.2。 docker/docker-ce-packaging#1043
- 将 Go runtime 更新至 1.21.13。 moby/moby#48301, docker/cli#5325, docker/docker-ce-packaging#1046
- 从 Windows 安装包中移除未使用的 `docker-proxy.exe` 二进制文件。 docker/docker-ce-packaging#1045
27.1.1
2024-07-23安全
本版本包含对 CVE-2024-41110 / GHSA-v23v-6jw2-98fq 的修复,该漏洞影响使用 授权插件(AuthZ) 进行访问控制的配置。此版本未包含其他变更,对于不使用 AuthZ 插件的用户而言,此版本与之前版本在其他方面相同。
打包更新
- 将 Compose 更新至 v2.29.1。 moby/docker-ce-packaging#1041
27.1.0
2024-07-22有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
- docker/cli,27.1.0 里程碑
- moby/moby,27.1.0 里程碑
- 已弃用和移除的功能,请参阅 已弃用功能。
- Engine API 的变更,请参阅 API 版本历史。
Bug 修复和增强功能
- rootless:添加 `Requires=dbus.socket` 以防止在使用 systemd 的 cgroup v2 主机上启动守护程序时出现错误。 moby/moby#48141
- containerd 集成:使用 BuildKit 构建镜像时,现在会正确地发出 `image tag` 事件。 moby/moby#48182
- CLI:为 `docker image rm`、`docker image history` 和 `docker image inspect` 命令启用 shell 补全。 moby/moby#5261
- CLI:为各种标志添加和改进 shell 补全 moby/moby#5261
- CLI:为
docker service create
和docker stack
添加 OOMScoreAdj docker/cli#5274 - CLI:添加对
DOCKER_CUSTOM_HEADERS
环境变量的支持(实验性)docker/cli#5271 - CLI: containerd 集成:修复在不受支持的 API 版本上,
docker push
将--platform
标志默认设置为 DOCKER_DEFAULT_PLATFORM 环境变量值的问题 docker/cli#5248 - CLI: 修复:
login
提示符上的上下文取消问题 docker/cli#5260 - CLI: 修复:当向连接到容器的 CLI 发送终止请求时,等待容器退出后再关闭流的问题 docker/cli#5250
已弃用
pkg/rootless/specconv
包已弃用,将在下个版本中移除 moby/moby#48185pkg/containerfs
包已弃用,将在下个版本中移除 moby/moby#48185pkg/directory
包已弃用,将在下个版本中移除 moby/moby#48185- api/types/system: 移除已弃用的
Info.ExecutionDriver
moby/moby#48184
打包更新
- 将 Buildx 更新到 v0.16.1。 moby/docker-ce-packaging#1039
- 将 Compose 更新到 v2.29.0。 moby/docker-ce-packaging#1038
- 将 Containerd(仅静态二进制文件)更新到 v1.7.20。 moby/moby#48191
- 将 BuildKit 更新到 v0.15.0。 moby/moby#48175
- 将 Go 运行时更新到 1.21.12,其中包含 CVE-2024-24791 的安全修复 moby/moby#48120
27.0
Docker Engine 27.0 的发布说明。
27.0.3
2024-07-01有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
- docker/cli,27.0.3 里程碑
- moby/moby,27.0.3 里程碑
- 已弃用和移除的功能,请参阅 已弃用功能。
- Engine API 的变更,请参阅 API 版本历史。
Bug 修复和增强功能
- 修复了将主机 IPv6 地址到仅支持 IPv4 的容器的端口映射错误地报告为错误的问题。 moby/moby#48090
- 修复了创建网络时导致重复子网分配的回归问题。 moby/moby#48089
- 修复了在支持原生 overlay 和用户命名空间的系统上启用 rootless 模式拉取镜像时导致
fail to register layer: failed to Lchown
错误的问题。 moby/moby#48086
27.0.2
2024-06-27有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
- docker/cli,27.0.2 里程碑
- moby/moby,27.0.2 里程碑
- 已弃用和移除的功能,请参阅 已弃用功能。
- Engine API 的变更,请参阅 API 版本历史。
Bug 修复和增强功能
- 修复了解析 Docker 注册表 URL 时端口号被忽略的回归问题。 docker/cli#5197, docker/cli#5198
已移除
- api/types: 弃用
ContainerJSONBase.Node
字段和ContainerNode
类型。这些定义曾用于独立的(“经典”)Swarm API,但从未在 Docker Engine 本身中实现。 moby/moby#48055
27.0.1
2024-06-24有关此版本中所有拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
- docker/cli,27.0.0 里程碑
- moby/moby,27.0.0 里程碑
- 已弃用和移除的功能,请参阅 已弃用功能。
- Engine API 的变更,请参阅 API 版本历史。
新增
- containerd 镜像存储:为
docker image push
添加--platform
标志,并改进当多平台镜像并非所有平台都在本地可用时的默认行为。 docker/cli#4984, moby/moby#47679 - 在服务的网络中,为
docker stack deploy
添加对driver_opts
的支持。 docker/cli#5125 - 在通过带有
docker-
前缀的名称查找用户态代理二进制文件时,考虑额外的/usr/local/libexec
和/usr/libexec
路径。 moby/moby#47804
Bug 修复和增强功能
*client.Client
实例现在始终可以安全地被多个 goroutine 并发使用。此前,使用WithAPIVersionNegotiation()
选项时可能导致数据竞争。 moby/moby#47961- 修复了导致 Docker CLI 在某些情况下泄露 $TMPDIR 中的 Unix 套接字的错误。 docker/cli#5146
- 与
--privileged
一起使用时,不再忽略自定义 seccomp 配置文件。 moby/moby#47500 - rootless: overlay2: 在 Linux 内核版本 5.11 及更高版本中使用 rootless 模式时,支持原生 overlay diff。 moby/moby#47605
- 修复 healthcheck 的
StartInterval
默认值以反映文档中记载的 5 秒值。 moby/moby#47799 - 修复了当用户取消操作(例如使用 Ctrl+C)时,
docker save
和docker load
在守护程序端未终止的问题。 moby/moby#47629 - 容器的
StartedAt
属性现在在容器启动前记录,保证StartedAt
始终在FinishedAt
之前。 moby/moby#47003 - Windows 上 Windows 容器使用的内部 DNS 解析器现在默认将请求转发到外部 DNS 服务器。这使得
nslookup
能够解析外部主机名。此行为可以通过daemon.json
中的"features": { "windows-dns-proxy": false }
进行禁用。此配置选项将在未来的版本中移除。 moby/moby#47826 - 当 CLI 没有读取配置文件的权限时打印警告。 docker/cli#5077
- 修复了容器连接时的 goroutine 和文件描述符泄露问题。 moby/moby#45052
- 在守护程序启动期间清除所有已停止或死亡容器的网络状态。 moby/moby#47984
- 原子地写入卷选项 JSON,以避免系统崩溃后出现“无效 JSON”错误。 moby/moby#48034
- 允许多个 macvlan 网络使用相同的父接口。 moby/moby#47318
- 允许在宣传支持 BuildKit 的 Windows 守护进程上使用 BuildKit。 docker/cli#5178
网络
- 在容器创建和网络连接期间,允许按接口设置 sysctls。 moby/moby#47686
- 在未来的版本中,这将是设置每个接口 sysctl 选项的唯一方式。例如,在
docker run
命令的命令行中,--network mynet --sysctl net.ipv4.conf.eth0.log_martians=1
将被拒绝。相反,您必须使用--network name=mynet,driver-opt=com.docker.network.endpoint.sysctls=net.ipv4.conf.IFNAME.log_martians=1
。
- 在未来的版本中,这将是设置每个接口 sysctl 选项的唯一方式。例如,在
IPv6
ip6tables
不再是实验性功能。如果 IPv6 不被其他任何特性所需要,您可以移除experimental
配置选项并继续使用 IPv6。- 对于 Linux bridge 网络,
ip6tables
现在默认启用。 moby/moby#47747- 这使得 IPv4 和 IPv6 的行为彼此一致,并降低了启用 IPv6 的容器意外暴露在网络中的风险。
- 如果您运行的 Docker Engine 已启用
ip6tables
(新的默认设置),则没有影响。 - 如果您使用的是未启用
ip6tables
的 IPv6 bridge 网络,这可能是一个破坏性变更。只有发布的容器端口(-p
或--publish
)才能从 Docker bridge 网络外部访问,并且出站连接会伪装成主机。 - 要恢复早期版本的行为(完全不使用
ip6tables
),请在daemon.json
中设置"ip6tables": false
,或使用 CLI 选项--ip6tables=false
。另外,您也可以保持ip6tables
启用,发布端口,并启用直接路由。 - 在启用
ip6tables
的情况下,如果ip6tables
在您的主机上无法正常工作,Docker Engine 仍然会启动,但将无法创建启用 IPv6 的网络。
IPv6 网络配置改进
- 如果未手动配置
default-address-pools
参数,或者该参数不包含任何 IPv6 前缀,则会自动添加一个 Unique Local Address (ULA) 基前缀。 moby/moby#47853- 在此版本之前,要创建启用 IPv6 的网络,必须使用
--subnet
选项指定 IPv6 子网,或者在daemon.json
中将 IPv6 范围添加到default-address-pools
。 - 从此版本开始,当使用
--ipv6
创建 bridge 网络且未通过这些选项定义 IPv6 子网时,将使用 IPv6 Unique Local Address (ULA) 基前缀。 - ULA 前缀派生自 Engine 主机 ID,以确保其在不同主机和时间上是唯一的。
- 在此版本之前,要创建启用 IPv6 的网络,必须使用
- 现在可以将任意大小的 IPv6 地址池添加到
default-address-pools
。 moby/moby#47768 - 现在可以通过在
daemon.json
中使用"default-network-opts": { "bridge": {"com.docker.network.enable_ipv6": "true"}}
,或在命令行中使用dockerd --default-network-opt=bridge=com.docker.network.enable_ipv6=true
来默认启用所有自定义 bridge 网络的 IPv6。 moby/moby#47867 - 启用
ip6tables
的 IPv6 网络的直接路由。 moby/moby#47871- 添加了 bridge 驱动选项
com.docker.network.bridge.gateway_mode_ipv6=<nat|routed>
。 - 默认行为
nat
与之前启用ip6tables
的版本相比没有变化。为每个发布的容器端口设置了 NAT 和伪装规则。 - 当设置为
routed
时,不会为发布的端口配置 NAT 或伪装规则。如果主机的网络可以将容器地址的数据包路由到主机,这将启用对容器的直接 IPv6 访问。发布的端口将在容器的防火墙中打开。 - 当端口映射仅适用于
routed
模式时,只允许地址0.0.0.0
或::
,并且不得指定主机端口。 - 请注意,在
nat
或routed
模式下,如果网络中设置了路由,除非 Docker 主机的防火墙有额外的限制,否则发布的容器端口可以从任何远程地址访问。例如:docker network create --ipv6 -o com.docker.network.bridge.gateway_mode_ipv6=routed mynet
。 - 选项
com.docker.network.bridge.gateway_mode_ipv4=<nat|routed>
也可用,行为与 IPv6 相同但适用于 IPv4。
- 添加了 bridge 驱动选项
- 如果主机上运行 firewalld,Docker 会创建
docker-forwarding
策略以允许从任何区域转发到docker
区域。这使得配置具有可路由 IPv6 地址且没有 NAT 或伪装的 bridge 网络成为可能。 moby/moby#47745 - 当发布端口时未指定主机端口,或指定了主机端口范围,则会为 IPv4 和 IPv6 分配相同的端口。 moby/moby#47871
- 例如,
-p 80
将导致为0.0.0.0
和::
分配相同的临时端口,而-p 8080-8083:80
将为这两个地址族从范围内选择相同的端口。 - 同样,发布到特定地址的端口也将分配相同的端口。例如,
-p 127.0.0.1::80 -p '[::1]::80'
。 - 如果在所有所需地址上都没有可用端口,则容器创建将失败。
- 例如,
- 环境变量
DOCKER_ALLOW_IPV6_ON_IPV4_INTERFACE
,在 26.1.1 版本中引入,不再有任何作用。 moby/moby#47963- 如果由于
/proc/sys/net
是只读的而无法在接口上禁用 IPv6,该环境变量曾允许容器继续启动。 - 在此版本中,如果无法为某个接口禁用 IPv4,只需在创建网络时使用
--ipv6
即可显式启用该网络的 IPv6。其他替代方案是配置操作系统在新接口上默认禁用 IPv6,以读写模式挂载/proc/sys/net
,或使用不支持 IPv6 的内核。
- 如果由于
- 对于启用 IPv6 的 bridge 网络,请勿尝试将 bridge 的内核分配的链路本地地址替换为
fe80::1
。 moby/moby#47787
已移除
- 弃用实验性 GraphDriver 插件。 moby/moby#48050, docker/cli#5172
- pkg/archive: 弃用
NewTempArchive
和TempArchive
。这些类型仅在测试中使用,将在下个版本中移除。 moby/moby#48002 - pkg/archive: 弃用
CanonicalTarNameForPath
moby/moby#48001 - 弃用 pkg/dmesg。此包已不再使用,将在下个版本中移除。 moby/moby#47999
- 弃用
pkg/stringid.ValidateID
和pkg/stringid.IsShortID
moby/moby#47995 - runconfig: 弃用
SetDefaultNetModeIfBlank
并将ContainerConfigWrapper
移至api/types/container
。 moby/moby#48007 - runconfig: 弃用
DefaultDaemonNetworkMode
并移至daemon/network
。 moby/moby#48008 - runconfig: 弃用
opts.ConvertKVStringsToMap
。此工具已不再使用,将在下个版本中移除。 moby/moby#48016 - runconfig: 弃用
IsPreDefinedNetwork
。 moby/moby#48011
API
- containerd 镜像存储:
POST /images/{name}/push
现在支持platform
参数(JSON 编码的 OCI Platform 类型),该参数允许从多平台镜像中选择特定的平台清单。这是实验性功能,在未来的 API 版本中可能会发生变化。 moby/moby#47679 POST /services/create
和POST /services/{id}/update
现在支持OomScoreAdj
。 moby/moby#47950ContainerList
API 返回容器注解。 moby/moby#47866POST /containers/create
和POST /services/create
现在将Options
作为HostConfig.Mounts.TmpfsOptions
的一部分,允许为 tmpfs 挂载设置选项。 moby/moby#46809- 在使用低于 v1.44 的 API 版本更新 Swarm 服务时,
Healthcheck.StartInterval
属性现在已被正确忽略。 moby/moby#47991 GET /events
现在支持镜像create
事件,该事件在新镜像构建完成时触发,无论是否打了标签。 moby/moby#47929GET /info
现在包含一个Containerd
字段,其中包含有关 containerd API socket 位置以及守护进程用于运行容器和插件的 containerd 命名空间的信息。 moby/moby#47239- 弃用镜像检查输出中的非标准(配置)字段。此端点(用于
docker image inspect
)返回的Config
字段包含额外的字段,这些字段不是镜像配置的一部分,也不属于 Docker Image Spec 和 OCI Image Spec。这些字段从未被设置过(并且总是返回该类型的默认值),但如果为空,在响应中也不会被省略。由于这些字段并非旨在成为镜像配置响应的一部分,因此它们已被弃用,并将在未来的 API 版本中移除。 - 弃用守护进程标志
--api-cors-header
和相应的daemon.json
配置选项。这些将在下个主要版本中移除。 moby/moby#45313
以下已弃用字段目前包含在 API 响应中,但不属于底层镜像的 Config
: moby/moby#47941
Hostname
Domainname
AttachStdin
AttachStdout
AttachStderr
Tty
OpenStdin
StdinOnce
Image
NetworkDisabled
(未设置时已省略)MacAddress
(未设置时已省略)StopTimeout
(未设置时已省略)
Go SDK 变更
- 以下函数的客户端 API 回调现在需要一个 context 参数。 moby/moby#47536
client.RequestPrivilegeFunc
client.ImageSearchOptions.AcceptPermissionsFunc
image.ImportOptions.PrivilegeFunc
- 移除镜像类型的已弃用别名。 moby/moby#47900
ImageImportOptions
ImageCreateOptions
ImagePullOptions
ImagePushOptions
ImageListOptions
ImageRemoveOptions
- 引入
Ulimit
类型别名,用于github.com/docker/go-units.Ulimit
。API 中使用的Ulimit
类型是在一个 Go 模块中定义的,该模块未来将迁移到新的位置。添加类型别名是为了减少类型迁移到新位置带来的不便。此别名确保现有代码继续工作,但其定义未来可能会改变。建议用户使用此别名,而不是直接使用units.Ulimit
。 moby/moby#48023
移动并重命名类型,更改其导入路径和导出名称。 moby/moby#47936, moby/moby#47873, moby/moby#47887, moby/moby#47882, moby/moby#47921, moby/moby#48040
- 将以下类型移动到
api/types/container
BlkioStatEntry
BlkioStats
CPUStats
CPUUsage
ContainerExecInspect
ContainerPathStat
ContainerStats
ContainersPruneReport
CopyToContainerOptions
ExecConfig
ExecStartCheck
MemoryStats
NetworkStats
PidsStats
StatsJSON
Stats
StorageStats
ThrottlingData
- 将以下类型移动到
api/types/image
ImagesPruneReport
ImageImportSource
ImageLoadResponse
- 将
ExecStartOptions
类型移动到api/types/backend
。 - 将
VolumesPruneReport
类型移动到api/types/volume
。 - 将
EventsOptions
类型移动到api/types/events
。 - 将
ImageSearchOptions
类型移动到api/types/registry
。 - 移除
Network
前缀,并将以下类型移动到api/types/network
NetworkCreateResponse
NetworkConnect
NetworkDisconnect
NetworkInspectOptions
EndpointResource
NetworkListOptions
NetworkCreateOptions
NetworkCreateRequest
NetworksPruneReport
- 将
NetworkResource
移动到api/types/network
。
打包更新
- 将 Buildx 更新到 v0.15.1。 docker/docker-ce-packaging#1029
- 将 BuildKit 更新到 v0.14.1。 moby/moby#48028
- 将 runc 更新到 v1.1.13 moby/moby#47976
- 将 Compose 更新到 v2.28.1。 moby/docker-ce-packaging#1032
27.0.0
由于在 GitHub 上预发布 27.0.0-rc.1 时发生错误,导致创建了 v27.0.0 标签,因此没有 27.0.0 版本发布。不幸的是,该标签已被 Go Module Mirror 抓取,因此无法正常更改 v27.0.0。为了解决此问题,27.0.1 将成为 27.0 系列的第一个版本。