Docker Engine 23.0 发行说明
注意从 Docker Engine 23.0.0 版本开始,Buildx 以单独的软件包 `docker-buildx-plugin` 发布。在早期版本中,Buildx 包含在 `docker-ce-cli` 软件包中。升级到此版本的 Docker Engine 时,请务必更新所有软件包。例如,在 Ubuntu 上:
$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin有关升级 Docker Engine 的更多详细信息,请参阅适用于您的操作系统的 Docker Engine 安装说明。
本页面介绍 Docker Engine 23.0 版本的最新更改、新增功能、已知问题和修复。
有关更多信息,请参阅:
- 已弃用和已移除的功能,请参阅已弃用的引擎功能。
- 对引擎 API 的更改,请参阅引擎 API 版本历史。
从 23.0.0 版本开始,Docker Engine 不再使用 CalVer 版本控制,而是开始使用 SemVer 版本控制格式。更改版本格式是迈向 Go 模块兼容性的一步,但该存储库尚未使用 Go 模块,并且仍需要使用 "+incompatible" 版本。我们将在未来的版本中继续努力实现 Go 模块兼容性。
23.0.6
2023-05-08有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
错误修复和增强
- 修复 vfs 存储驱动程序在 NFS 上无法工作的问题。moby/moby#45465
软件包更新
- 将 Go 升级到 `1.19.9`。docker/docker-ce-packaging#889、docker/cli#4254、moby/moby#45455
- 将 `containerd` 升级到 v1.6.21
- 将 `runc` 升级到 v1.1.7
23.0.5
2023-04-26有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
错误修复和增强
- 修剪卷时添加 `--all` / `-a` 选项。docker/cli#4229
- 为 `docker info` 添加 `--format=json`。docker/cli#4320
- 修复 AWSLogs 日志驱动程序日志丢失问题。moby/moby#45350
- 修复 v23.0.4 中引入的回归问题,即如果提供了 fixed-cidr 配置参数但未提供 bip,dockerd 将拒绝启动。moby/moby#45403
- 修复守护进程启动期间 libnetwork 中的崩溃问题 moby/moby#45376
- 修复使用 `buildx` 构建镜像时未发送“tag”事件的问题。moby/moby#45410
软件包更新
- 将 Compose 升级到 `2.17.3`。docker/docker-ce-packaging#883
23.0.4
2023-04-17有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
错误修复和增强
- 修复 Docker CLI 23.0.0 中的性能回归问题 docker/cli#4141。
- 修复 `docker cp` 进度指示器未按预期工作的问题 docker/cli#4157。
- 修复 `docker compose --file` 的 shell 自动补全问题 docker/cli#4177。
- 修复 `daemon.json` 中“default-address-pools”处理不正确导致的错误 moby/moby#45246。
软件包更新
- 修复 CentOS 9 Stream 缺少软件包的问题。
- 将 Go 升级到 `1.19.8`。docker/docker-ce-packaging#878、docker/cli#4164、moby/moby#45277,其中包含 CVE-2023-24537、CVE-2023-24538、CVE-2023-24534 和 CVE-2023-24536 的修复。
23.0.3
2023-04-04注意由于 CentOS 9 Stream 的软件包仓库存在问题,CentOS 9 的软件包目前不可用。CentOS 9 的软件包可能会在稍后添加,或作为下一个 (23.0.4) 补丁版本的一部分。
错误修复和增强
- 修复了可能导致 Swarm 加密覆盖网络未能履行其保证的多个问题,解决了 CVE-2023-28841、CVE-2023-28840 和 CVE-2023-28842。
- 内核不支持加密覆盖网络现在报告为错误。
- 加密覆盖网络会主动设置,而不是等待多个节点连接。
- 通过使用 `xt_bpf` 内核模块,加密覆盖网络现在可以在 Red Hat Enterprise Linux 9 上使用。
- Swarm 覆盖网络的用户应查看 GHSA-vwm3-crmr-xfxw,以确保没有发生意外暴露。
软件包更新
23.0.2
2023-03-28有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
错误修复和增强
- 当检测到启用 AppArmor 的内核时,完全解决 `apparmor_parser` 缺少检查的问题。containerd/containerd#8087、moby/moby#45043
- 确保在生成 BuildKit 构建信息时,从 Git URL 中隐藏凭据。修复了 CVE-2023-26054。moby/moby#45110
- 修复 Dockerfile 中 `VOLUME` 行创建的匿名卷被排除在卷修剪之外的问题。moby/moby#45159
- 修复 Swarm 节点上删除卷时未能正确传播错误的问题。moby/moby#45155
- 通过禁用 mergeop/diffop 优化,临时解决 BuildKit `COPY --link` 中的错误。moby/moby#45112
- 删除父 Swarm 作业时,正确清理子任务。moby/swarmkit#3112、moby/moby#45107
- 修复 Swarm 服务创建逻辑,以便通用资源和非默认网络可以一起使用。moby/swarmkit#3082、moby/moby#45107
- 修复 Swarm CSI 支持要求 CSI 插件提供暂存端点才能发布卷的问题。moby/swarmkit#3116、moby/moby#45107
- 修复某些配置中日志缓冲导致的崩溃问题。containerd/fifo#47、moby/moby#45051
- 在 REST 到 Swarm gRPC API 转换层中以调试级别记录错误,以减少冗余和噪音。moby/moby#45016
- 修复在容器外部使用 `systemd-resolved` 时,使用 `--dns-opt` 或 `--dns-search` 创建的容器出现的 DNS 解析问题。moby/moby#45000
- 修复处理来自容器内部的 DNS 查询时记录错误导致的崩溃问题。moby/moby#44980
- 通过允许用户使用 `--size=false` 选择不进行大小计算,提高 `docker ps` 的速度。docker/cli#4107
- 将 Bash 补全支持扩展到所有插件。docker/cli#4092
- 修复 Windows 上当 `cmd.exe` 设置特殊环境变量时,`docker stack deploy` 失败的问题。docker/cli#4083
- 通过将空镜像标签视为空 `
`,为未来的 API 版本添加向前兼容性。docker/cli#4065 - 原子地写入上下文文件,大大降低损坏的可能性,并改进损坏上下文的错误消息。docker/cli#4063
打包
- 将 Go 升级到 `1.19.7`。docker/docker-ce-packaging#857、docker/cli#4086、moby/moby#45137
- 将 `containerd` 升级到 `v1.6.19`。moby/moby#45084、moby/moby#45099
- 将 Buildx 升级到 `v0.10.4`。docker/docker-ce-packaging#855
- 将 Compose 升级到 `v2.17.2`。docker/docker-ce-packaging#867
23.0.1
2023-02-09有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
错误修复和增强
- 修复当内核启用 AppArmor 但 `apparmor_parser` 不可用时容器无法启动的问题。moby/moby#44942
- 修复 BuildKit 启用的内联缓存构建导致守护进程崩溃的问题。moby/moby#44944
- 修复 BuildKit 错误加载早期版本创建的缓存层的问题。moby/moby#44959
- 修复升级后,在升级前创建的 `ipvlan` 网络会阻止守护进程启动的问题。moby/moby#44937
- 修复 `overlay2` 存储驱动程序在不受支持的后端文件系统上初始化时,`metacopy` 测试过早失败的问题。moby/moby#44922
- 修复在某些运行时(例如 Kata Containers)下,`exec` 退出事件被错误地解释为容器退出的问题。moby/moby#44892
- 改进 CLI 在收到因 API 在请求中间挂起而导致的截断 JSON 响应时返回的错误消息。docker/cli#4004
- 修复在使用 Go 1.20 编译的 `runc` 尝试执行目录时 CLI 退出代码不正确的问题。docker/cli#4004
- 修复将 `–device-write-bps` 的大小参数错误处理为路径的问题。docker/cli#4004
打包
- 将 `/etc/docker` 添加到 RPM 和 DEB 软件包中。docker/docker-ce-packaging#842
- 并非所有用例都会受益;如果您依赖此功能,应明确 `mkdir -p /etc/docker`。
- 将 Compose 升级到 `v2.16.0`。docker/docker-ce-packaging#844
23.0.0
2023-02-01有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
新增
- 将 Buildx 和 BuildKit 设置为 Linux 上的默认构建器。moby/moby#43992
- 将 `docker build` 别名为 `docker buildx build`。docker/cli#3314
- 通过明确设置 `DOCKER_BUILDKIT=0` 仍可使用旧版构建器。
- BuildKit 和旧版构建器在处理多阶段构建方面存在差异。有关更多信息,请参阅 多阶段构建。
- 添加了对拉取 `zstd` 压缩层的支持。moby/moby#41759、moby/moby#42862
- 添加了对 Linux 上替代 OCI 运行时(与 containerd 运行时 v2 API 兼容)的支持。moby/moby#43887、moby/moby#43993
- 添加了对 Windows 上 containerd `runhcs` shim 的支持(默认禁用)。moby/moby#42089
- 添加 `dockerd --validate` 以检查守护进程 JSON 配置并退出。moby/moby#42393
- 添加了通过标志或 JSON 配置守护进程 HTTP 代理的功能。moby/moby#42835
- 添加了对 RFC 3021 点对点网络 (IPv4 /31s) 和单主机 (IPv4 /32s) 的支持。对于地址少于或等于两个的网络,IPAM 不会保留网络和广播地址。moby/moby#42626
- 在 `ipvlan` 网络驱动程序中添加了对设置 `ipvlan_flag` 和使用 `l3s` `ipvlan_mode` 的支持。moby/moby#42542
- 添加了对显示 `overlay2` 存储驱动程序的 `metacopy` 选项值的支持。moby/moby#43557
- 添加了对使用 `IDType://ID` 语法描述 Windows 设备的支持。moby/moby#43368
- 添加了 `RootlessKit`、`slirp4netns` 和 `VPNKit` 版本报告。moby/moby#42330
- 添加了对 SwarmKit 集群卷 (CSI) 的实验性支持。moby/moby#41982
- CLI:将集群卷 (CSI) 选项添加到 `docker volume`。docker/cli#3606
- CLI:为 `docker stack` 添加集群卷 (CSI) 支持。docker/cli#3662
- 在 `docker stack deploy` 中添加了对 SwarmKit 作业的支持。docker/cli#2907
- 添加 `docker stack config` 命令,以输出 `stack deploy` 使用的合并和插值配置文件。docker/cli#3544
- 添加了一个新的 `docker context show` 命令,用于打印当前上下文的名称。docker/cli#3567
- 将 `--format=json` 缩写形式的 `--format="{{ json . }}"` 添加到所有支持 `--format` 标志的命令中。docker/cli#2936
- 为 `docker create` 和 `docker run` 命令添加了 `--quiet` 选项,以在拉取镜像时抑制输出。docker/cli#3377
- 为 `docker network rm` 子命令添加了 `--force` 选项。即使网络不存在,CLI 也会返回 0 退出代码。对服务器端删除网络的程序没有影响。docker/cli#3547
- 为 `docker stop` 和 `docker restart` 添加了 `--signal` 选项。docker/cli#3614
- 为 `docker-proxy` 添加了 `-v/--version` 标志。moby/moby#44703
- 当守护进程以无根模式运行时,插件现在可以在众所周知的用户级别路径中被发现。moby/moby#44778
- 守护进程现在可以优雅地处理 JSON 配置文件中常见的替代 JSON 编码,并报告有用的错误。moby/moby#44777、moby/moby#44832
- 接受带有字节顺序标记的 UTF-8。
- 接受带有字节顺序标记的 UTF-16。
- 无效的 UTF-8 会及早报告,并附有易于理解的错误消息。
- 允许通过 `docker commit` 使用 `STOPSIGNAL`。moby/moby#43369
- 为 `awslogs` 日志驱动程序添加了一个新选项,以允许跳过在 CloudWatch 中创建日志流。moby/moby#42132
- 为 `awslogs` 日志驱动程序添加了一个新选项,以指定发送到 CloudWatch 的日志格式。moby/moby#42838
- 为 `fluentd` 日志驱动程序添加了一个新选项,以设置重新连接间隔。moby/moby#43100
- 为 Go API 客户端添加了新的选项设置器:`WithTLSClientConfigFromEnv()`、`WithHostFromEnv()` 和 `WithVersionFromEnv()`。moby/moby#42224
- 通过 `docker completion` 子命令添加了 shell 命令自动补全的生成。docker/cli#3429
- API:为 `GET /_ping` 和 `HEAD /_ping` 添加了 `Swarm` 标头,允许单请求检测 Swarm 支持。moby/moby#42064
- API:为 `POST /containers/{id}/stop` 和 `POST /containers/{id}/restart` 添加了 `signal` 参数,以设置使用的信号。moby/moby#43206
- API:为 `POST /containers/create` 添加了 `CreateMountPoint` 参数。moby/moby#43484
- API:为 `GET /images/json` 添加了 `shared-size` 参数,以启用镜像的共享大小计算。moby/moby#42531
- API:为 `GET /system/df` 添加了 `type` 参数,以控制在计算磁盘使用情况时考虑哪些对象类型。moby/moby#42559
- systemd:使用 systemd 管理的 containerd,而不是守护进程管理的 containerd。moby/moby#42373
- systemd:在 `time-set.target` 之后启动 `docker.service`。moby/moby#43107
已移除
- 移除对从 `~/.dockercfg` 读取配置的支持。docker/cli#2504
- 此位置自 1.7.0 版本起已被弃用。
- 弃用通知
- 移除 `-g` 和 `--graph` 守护进程选项,转而使用 `--data-root`。docker/cli#3739
- 这些选项自 17.05 版本起已被隐藏和弃用。
- 弃用通知
- 移除客户端结果排序,转而采用搜索 API 返回的顺序。docker/cli#3470
- 移除 CLI 中与已弃用存储驱动程序相关的警告。警告现在由守护进程处理。docker/cli#3542
- 从 `docker version` 中移除 `Experimental` 客户端字段。docker/cli#3543
- 要求明确选择使用已弃用的存储驱动程序,并且在升级时不要自动选择它们。moby/moby#43378
- 移除对在不支持 `d_type` 的后端文件系统上使用 `overlay` 和 `overlay2` 存储驱动程序的弃用支持。moby/moby#43472
- 移除 `overlay2` 存储驱动程序中已弃用的 `overrideKernelCheck` 选项。moby/moby#44279 弃用通知
- 移除对已弃用 `io.containerd.runtime.v1.linux` OCI 运行时的支持。moby/moby#43695
- 移除 LCOW (Linux Containers on Windows)。moby/moby#42451、moby/moby#42499、moby/moby#42506、moby/moby#42511、moby/moby#42520、moby/moby#42683、moby/moby#42684、moby/moby#42685、moby/moby#43187
- LCOW 在 17.09 中作为技术预览引入,并在 20.10 中弃用。
- 弃用通知
- 移除与独立 Swarm 配合使用的旧版覆盖网络相关的守护进程选项。
- 从 `dockerd` 中移除 `--cluster-xx` 选项。moby/moby#40383
- 移除 `host-discovery` 和带有外部 k/v 存储的覆盖网络。moby/moby#42247
- 弃用通知
- 移除了已弃用的 `arm` 平台回退。现在,当 `arm/vY` 不可用时,`--platform linux/arm/vY` 将返回错误,而不是拉取错误的镜像。moby/moby#44414
- 从 Go 客户端 API 中移除了已弃用的 `SetCustomHTTPHeaders()`、`CustomHTTPHeaders()` 选项设置器。moby/moby#42694
- 从 Go 客户端 API 中移除了已弃用的 `WithDialer()` 选项设置器。moby/moby#44022
- 改用 `WithDialContext()`。
- 移除守护进程中 `opts.QuotedString` 的实现。该实现已移至 CLI。moby/moby#43250
- 移除守护进程中信任密钥中的独立守护进程 ID,并禁用信任密钥的生成。moby/moby#43555
- API:在 API 版本 >= 1.42 中,从 `POST /containers/create` 中移除已弃用的 `KernelMemory` 选项。moby/moby#43214
已弃用
- 要求 Windows Server RS5 / LTSC 2019(Build 17763)作为运行守护进程的最低版本。moby/moby#43254
- 在 API 版本 >= 1.42 中弃用 `BuilderSize`。moby/moby#42608
- 在 API 版本 >= 1.42 中弃用 `BuildCache.Parent`,转而使用新引入的 `BuildCache.Parents`。moby/moby#43908
- 弃用 `pkg/urlutil`,将其实现移至 `builder/remotecontext/urlutil`。moby/moby#43477
升级
- 将 Go 升级到 `1.19.5`。docker/cli#3958、moby/moby#44794
- 将 `rootlesskit` 升级到 `v0.14.4`。moby/moby#42708
- 将 `buildkit` 升级到 `v0.10.6`。moby/moby#43239
- 将 `buildx` 升级到 `v0.10.2`。docker/docker-ce-packaging#840
- 将 `swarmkit` 升级到 `v2.0.0-20230119195359-904c221ac281`。moby/moby#44858
- 将 `containerd` 升级到 `v1.6.16`。moby/moby#44766、moby/moby#44769、moby/moby#44881
- 将 `runc` 升级到 `v1.1.4`。moby/moby#44039
- 将 `hcsshim` 升级到 `v0.9.6`。moby/moby#44658
- `btrfs` 存储驱动现在依赖于 Linux 内核头文件(>= 4.12),而不是 btrfs-progs 的头文件。moby/moby#44776
安全性
- 将容器 `hostconfig.json` 文件的权限更改为 `0600`(原为 `0644`)。moby/moby#41620
- 修复 `--seccomp-profile` 不接受 `unconfined` 的问题,并将默认 seccomp 配置文件重命名为 `builtin`。moby/moby#42481
- 始终使用 seccomp 支持进行构建,并删除 `seccomp` 构建标签。moby/moby#42501
- 在 `riscv64` 上添加 seccomp 支持。moby/moby#43553
- 添加了在 seccomp 配置文件中设置传递给 `seccomp(2)` 的标志的支持。moby/moby#42648
- 重构 seccomp 类型以重用运行时规范,并添加对 `ErrnoRet` 的支持。moby/moby#42005
- 在 `seccomp` 配置文件中添加了对 `DefaultErrnoRet` 的支持。moby/moby#42604
- 在默认 seccomp 配置文件中添加了显式 `DefaultErrnoRet` 字段,无行为更改。moby/moby#42649
- 在默认 seccomp 配置文件中阻止使用 `AF_VSOCK` 的 `socket`。moby/moby#44563
- 在默认 seccomp 配置文件中重新启用 `process_vm_readv` 和 `process_vm_writev`。moby/moby#42083
- 将与 PKU 相关的系统调用添加到默认 seccomp 配置文件中。moby/moby#43812
- 允许使用 `CAP_SYS_TIME` 的 `clock_settime64`。moby/moby#43775
- 允许使用 `CAP_BPF` 的 `bpf` 和使用 `CAP_PERFMON` 的 `perf_event_open`。moby/moby#43988
- 在默认 seccomp 配置文件中明确将 `clone3` 系统调用设置为返回 `ENOSYS`,以确保 `glibc` 将正确回退到使用 `clone`。moby/moby#42681
错误修复和增强
- 将 `overlay2` 提升为默认存储驱动程序(`btrfs` 和 `zfs` 现在是选择性加入)。moby/moby#42661
- 为 `docker cp` 命令添加了一个加载旋转器。docker/cli#2708
- 弃用 `ElectAuthServer` 函数,并使其返回默认注册表,而不调用 `GET /info` API 端点。docker/cli#2819
- 回滚 Swarm 服务时,进度条不再反转。docker/cli#2940
- 使用 `net.JoinHostPort()` 修复 IPv6 地址的格式问题。docker/cli#2972
- CLI 错误消息现在打印到 `stderr`。docker/cli#3044
- 如果使用仅使用本地信息的自定义 `--format`,则改进 `docker info` 的性能。通过此更改,CLI 仅在检测到需要守护进程信息时才使用守护进程 API。docker/cli#3179
- 移除 `--stop-signal` 标志的默认值,因为它可能无法反映守护进程使用的实际默认值。docker/cli#3245
- 为 `docker stack` 添加 Compose 架构 `3.10`;允许省略 `version` 字段(结果为 `latest`)。docker/cli#3257
- 在 `docker stack` 中,Compose 版本 `3` 现在等同于 `3.x`(最新)。docker/cli#3445
- 修复 Windows 上在非交互模式下运行容器后 `
` 挂起无法退出的问题。docker/cli#3302 - 在 `run` 命令的 `-v` / `--volume` 和 `-m` / `--mount` 标志中添加相对源路径。docker/cli#3469
- `docker exec -t` 现在在创建时立即为执行的进程设置控制台大小。docker/cli#3627
- 更新 `docker info` 的美观打印格式,以提供有关已安装插件的更多详细信息。docker/cli#3645
- 当上下文被环境覆盖时,为 `docker context list` 和 `docker context use` 命令打印警告消息。docker/cli#3668
- 添加自定义 `aliases` 注释,可用于打印命令的所有可用别名。docker/cli#3694
- 当运行 `docker context use` 并选择当前上下文时,CLI 不再创建或更新 CLI 配置文件。docker/cli#3721
- 运行 `docker context rm --force` 时,现在会忽略不存在的上下文。docker/cli#3791
- 添加了在 Compose 文件中将整数覆盖为 `0` 的功能。docker/cli#3812
- SIGINT(`
`)现在会传递给正在运行的容器,而不是导致 CLI 退出。docker/cli#3849 - 通过在打印前对端口进行排序,改进了 `docker port CONTAINER` 的用户体验。docker/cli#3892
- API:在 API 版本 >= 1.42 中,`GET /containers/{id}/logs` 和 `POST /containers/{id}/attach` 现在使用 `Content-type` 响应头报告正在使用的原始流格式。moby/moby#39812
- 将 Windows 层的默认沙盒大小设置为 127GB,并确保 `--storage-opts` 标志适用于 Windows 上的所有存储。moby/moby#41636
- 从 containerd 配置文件 (`/var/run/docker/containerd/containerd.toml`) 中移除插件部分。moby/moby#41675
- 在 tar 导入期间拒绝 `null` manifest。moby/moby#41842
- 为插件的自定义运行时添加 shim 配置。moby/moby#41854
- 守护进程重启后,容器健康检查现在会恢复。moby/moby#41935
- `btrfs` 驱动程序清理时不再禁用配额。moby/moby#42273
- 现在可以在 `--privileged` 无根容器中挂载可访问的主机设备。moby/moby#42638
- 修复 `.dockerignore` 中 `**/foo` 递归通配符目录模式处理不正确的问题。moby/moby#42676
- 扩展 `docker import --platform` 以允许将导入的镜像标记为外部架构。moby/moby#43103
- CPU 实时选项的验证现在在守护进程启动时执行,而不是为每个单独的容器执行验证,从而允许启动失败。moby/moby#43131
- 冻结 `namesgenerator` 软件包,不再添加新内容。用户将不得不满足于现有的 25359 种形容词-名称组合。moby/moby#43210
- API:`containers/{id}/attach/ws` 仅根据 API 版本 >= 1.42 中的 `stdin`、`stdout` 和 `stderr` 参数流式传输。moby/moby#43322
- 修复容器在持续流量下重启后 UDP 流量不工作的问题。moby/moby#43409
- 添加了对拉取具有自定义 amd64 微架构功能级别(由最新版本的 Go、GCC、LLVM 和其他编译器工具支持)的镜像的支持。moby/moby#43434
- 改进了 API 中无效 JSON 请求的验证。moby/moby#43463
- 减轻慢速 `exec` 启动对健康检查的影响。检查超时现在仅适用于健康检查命令运行的持续时间。启动命令所需的时间不再计入超时。moby/moby#43480
- 控制台 `tty` 大小在创建时立即设置。moby/moby#43593、moby/moby#43622
- 修复容器启动失败或守护进程关闭后 `overlay2` 挂载未清理的问题。moby/moby#43659
- 将 manifest 列表解析与 `containerd` 匹配。moby/moby#43675
- 当守护进程以无根模式运行时,跳过使用 `firewalld` 进行网络配置。moby/moby#43813
- 如果 Windows 上缺少自定义 NAT 网络,则在守护进程重启后重新创建。moby/moby#43858
- 修复容器健康检查进程超时时终止的问题。moby/moby#43994
- 修复带有重启策略和卷引用的 `live-restore` 问题。moby/moby#44237
- API:在 API 版本 >= v1.42 中,默认情况下仅修剪匿名卷。传递过滤器 `all=true` 以修剪命名卷和匿名卷。moby/moby#44259
- API:支持 `GET /system/df` 端点上的并发调用。moby/moby#42715
- 改进了守护进程转储堆栈并在收到 SIGQUIT 时以代码 2 退出时的可靠性。moby/moby#44831
- 提高了 Windows 上 `docker logs -f` 的可靠性,并防止 `local` 日志驱动程序中出现换行符丢失。moby/moby#43294
- 修复守护进程中因容器日志缓冲导致的罕见死锁问题。moby/moby#44856
- 改进了杂项文件系统操作中的错误处理,以便守护进程可以在 overlayfs 后端文件系统上启动。moby/moby#44834
- 修复当守护进程以无根模式运行时,`--ipc=host` 未正确处理的问题。moby/moby#44863
- 修复了长期存在的一系列问题,即陈旧的 conntrack 条目导致容器的 UDP 流量路由不正确。moby/moby#44752
- 修复 API 中列出的半注册容器,以及在 API 调用中使用部分注册容器导致的空指针解引用和崩溃。moby/moby#44633
- 修复创建 `DOCKER-USER` ip6tables 链失败的问题。moby/moby#44845
- 修复当 `ip6tables` 命令不可用时清理 iptables 规则失败的问题。moby/moby#44727
- 修复启用用户态代理后某些 iptables NAT 规则未清理的问题。moby/moby#44811
- 修复在极少数情况下,清理失败的容器启动尝试处理不当可能导致进程泄漏的问题。moby/moby#44400
- 修复卷的 `CreatedAt` 时间反映初始化而不是创建时间的问题。moby/moby#44725
- 修复 CLI 在某些命令中错误地报告不兼容服务器而不是不可达服务器的问题。docker/cli#3901、docker/cli#3904
- 修复 Zsh 中卷自动补全损坏的问题。docker/cli#2998
- 改进了当存在无效上下文时 `docker context` 的输出。docker/cli#3847
- 当输出不是 TTY 时,移除 CLI 帮助注释的 ANSI 装饰,并为可读性添加了换行符。docker/cli#3973
- 添加 `docker container remove` 作为 `docker container rm` 的别名。docker/cli#3986
已知问题
apparmor_parser (跟踪问题)
一些 Debian 用户报告称,升级到 23.0 分支后,容器启动失败。错误消息表明问题是由于缺少 `apparmor_parser` 二进制文件。
Error response from daemon: AppArmor enabled on system but the docker-default profile could not be loaded: running `apparmor_parser apparmor_parser --version` failed with output:
error: exec: "apparmor_parser": executable file not found in $PATH
Error: failed to start containers: somecontainer
此问题的解决方法是手动安装 `apparmor` 软件包。
apt-get install apparmor
BuildKit 内联缓存 (跟踪问题)
尝试使用 BuildKit 的内联缓存功能构建镜像(例如 `docker build --build-arg BUILDKIT_INLINE_CACHE=1 .`、`docker buildx build --cache-to type=inline .`)将导致守护进程意外退出。
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x18 pc=0x147ff00]
goroutine 693 [running]:
github.com/docker/docker/vendor/github.com/moby/buildkit/cache.computeBlobChain.func4.1({0x245cca8, 0x4001394960})
/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/cache/blobs.go:206 +0xc90
github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol.(*call).run(0x40013c2240)
/go/src/github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol/flightcontrol.go:121 +0x64
sync.(*Once).doSlow(0x0?, 0x4001328240?)
/usr/local/go/src/sync/once.go:74 +0x100
sync.(*Once).Do(0x4001328240?, 0x0?)
/usr/local/go/src/sync/once.go:65 +0x24
created by github.com/docker/docker/vendor/github.com/moby/buildkit/util/flightcontrol.(*call).wait如果守护进程配置为在崩溃后重新启动(例如通过 systemd),它将重新启动。此版本中唯一的缓解措施是避免在启用内联缓存功能的情况下执行构建。
BuildKit 暖缓存 (跟踪问题)
如果一个镜像是在守护进程的先前版本中使用 BuildKit 构建的,并且使用 23.0 守护进程构建,则以前缓存的层将无法正确恢复。如果 Dockerfile 中没有更改任何行,镜像可能看起来构建正确;但是,如果由于 Dockerfile 中更改了某些行而发生部分缓存失效,则仍然有效且以前缓存的层将无法正确加载。
这通常表现为在 Dockerfile 中更改某些行后,镜像中应该存在的文件在 `RUN` 阶段或任何其他引用文件的阶段中不存在。
[+] Building 0.4s (6/6) FINISHED
=> [internal] load build definition from Dockerfile
=> => transferring dockerfile: 102B
=> [internal] load .dockerignore
=> => transferring context: 2B
=> [internal] load metadata for docker.io/library/node:18-alpine
=> [base 1/2] FROM docker.io/library/node:18-alpine@sha256:bc329c7332cffc30c2d4801e38df03cbfa8dcbae2a7a52a449db104794f168a3
=> CACHED [base 2/2] WORKDIR /app
=> ERROR [stage-1 1/1] RUN uname -a
------
> [stage-1 1/1] RUN uname -a:
#0 0.138 runc run failed: unable to start container process: exec: "/bin/sh": stat /bin/sh: no such file or directory
------
Dockerfile:5
--------------------
3 |
4 | FROM base
5 | >>> RUN uname -a
6 |
--------------------
ERROR: failed to solve: process "/bin/sh -c uname -a" did not complete successfully: exit code: 1为了缓解此问题,必须丢弃以前的构建缓存。`docker builder prune -a` 将完全清空构建缓存,并通过删除处理不当的缓存层来允许受影响的构建再次进行。
ipvlan 网络 (跟踪问题)
升级到 23.0 分支时,任何 ipvlan 网络的存在都会阻止守护进程启动。
panic: interface conversion: interface {} is nil, not string
goroutine 1 [running]:
github.com/docker/docker/libnetwork/drivers/ipvlan.(*configuration).UnmarshalJSON(0x40011533b0, {0x400069c2d0, 0xef, 0xef})
/go/src/github.com/docker/docker/libnetwork/drivers/ipvlan/ipvlan_store.go:196 +0x414
encoding/json.(*decodeState).object(0x4001153440, {0x5597157640?, 0x40011533b0?, 0x559524115c?})
/usr/local/go/src/encoding/json/decode.go:613 +0x650
encoding/json.(*decodeState).value(0x4001153440, {0x5597157640?, 0x40011533b0?, 0x559524005c?})
/usr/local/go/src/encoding/json/decode.go:374 +0x40
encoding/json.(*decodeState).unmarshal(0x4001153440, {0x5597157640?, 0x40011533b0?})
/usr/local/go/src/encoding/json/decode.go:181 +0x204
encoding/json.Unmarshal({0x400069c2d0, 0xef, 0xef}, {0x5597157640, 0x40011533b0})
/usr/local/go/src/encoding/json/decode.go:108 +0xf4
github.com/docker/docker/libnetwork/drivers/ipvlan.(*configuration).SetValue(0x4000d18050?, {0x400069c2d0?, 0x23?, 0x23?})
/go/src/github.com/docker/docker/libnetwork/drivers/ipvlan/ipvlan_store.go:230 +0x38为了缓解此问题,受影响的用户可以降级并删除网络,然后再次升级。或者,可以删除整个网络存储,并在升级后重新创建网络。网络存储位于 `/var/lib/docker/network/files/local-kv.db`。如果守护进程正在使用备用 `--data-root`,则将 `/var/lib/docker` 替换为备用路径。
Kata Containers (跟踪问题)
23.0 分支带来了对替代 containerd shims 的支持,例如 `io.containerd.runsc.v1` (gVisor) 和 `io.containerd.kata.v2` (Kata Containers)。
当使用 Kata Containers 运行时时,退出 `exec` 会话会停止正在运行的容器,并且如果打开了 TTY,则会挂起连接的 CLI。目前没有缓解措施,只能避免在 Kata 运行时上运行的容器中执行 exec。
此问题的根本原因是 Moby 中一个长期存在的错误。这将在未来的版本中解决。请注意,对替代 OCI 运行时的支持是一个新功能,随着更多用户开始使用此功能,可能会发现类似问题。