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 - 添加
--format=json用于docker info。 docker/cli#4320 - 使用 AWSLogs 日志驱动程序修复日志丢失问题。 moby/moby#45350
- 修复在 v23.0.4 中引入的回归问题,当提供 fixed-cidr 配置参数但未提供 bip 时,dockerd 会拒绝启动。 moby/moby#45403
- 修复在守护程序启动期间 libnetwork 中的 panic 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。 - 修复由于错误处理“default-address-pools”在
daemon.json中导致的错误 moby/moby#45246。
软件包更新
- 修复 CentOS 9 Stream 的缺失包。
- 将 Go 升级到
1.19.8。docker/docker-ce-packaging#878, docker/cli#4164, moby/moby#45277, which contains fixes for CVE-2023-24537, CVE-2023-24538, CVE-2023-24534, and 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。
- 现在,内核不支持加密的 overlay 网络会报告为错误。
- 加密的 overlay 网络会立即设置,而不是等待多个节点连接。
- 通过使用
xt_bpf内核模块,加密的 overlay 网络现在可以在 Red Hat Enterprise Linux 9 上使用。 - Swarm overlay 网络的用户应查阅 GHSA-vwm3-crmr-xfxw 以确保没有发生意外暴露。
软件包更新
23.0.2
2023-03-28关于本次版本中所有拉取请求和变更的完整列表,请参阅相关的 GitHub 里程碑:
错误修复和功能增强
- 在检测到启用 AppArmor 的内核时,完全解决对
apparmor_parser的缺失检查。 containerd/containerd#8087, moby/moby#45043 - 在生成 BuildKit buildinfo 时,确保从 Git URL 中删除凭据。修复 CVE-2023-26054。 moby/moby#45110
- 修复由 Dockerfile 中的
VOLUME行创建的匿名卷被排除在卷清理之外的问题。 moby/moby#45159 - 修复在Swarm节点上删除卷时错误传播失败的问题。 moby/moby#45155
- 暂时绕过 BuildKit
COPY --link中的一个错误,通过禁用 mergeop/diffop 优化。 moby/moby#45112 - 当删除父级 Swarm 作业时,正确清理子任务。 moby/swarmkit#3112, moby/moby#45107
- 修复 Swarm 服务创建逻辑,以便可以同时使用 GenericResource 和非默认网络。 moby/swarmkit#3082, moby/moby#45107
- 修复 Swarm CSI 支持,要求 CSI 插件提供 staging 端点以发布卷。 moby/swarmkit#3116, moby/moby#45107
- 修复某些配置中日志缓冲导致的 panic。 containerd/fifo#47, moby/moby#45051
- 在REST到Swarm gRPC API转换层以调试级别记录错误,以减少冗余和噪音。 moby/moby#45016
- 修复在容器外使用
systemd-resolved时,使用--dns-opt或--dns-search创建的容器出现的 DNS 解析问题。 moby/moby#45000 - 修复在处理来自容器内部的DNS查询时记录错误引发的panic。 moby/moby#44980
- 通过允许用户使用
--size=false选择退出大小计算,提高docker ps的速度。 docker/cli#4107 - 将 Bash 补全的支持扩展到所有插件。 docker/cli#4092
- 修复在Windows上当由
cmd.exe设置的特殊环境变量存在时,docker stack deploy会失败的问题。 docker/cli#4083 - 通过将空镜像标签视为与
<none>相同,为未来的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 - 改善在接收由API在请求中途挂断导致的截断JSON响应时,CLI返回的错误消息。 docker/cli#4004
- 修复在尝试执行使用 Go 1.20 编译的带有
runc的目录时,CLI 退出代码不正确的问题。 docker/cli#4004 - 修复将
--device-write-bps作为路径时对 size 参数处理不当的问题。 docker/cli#4004
打包
- 在 RPM 和 DEB 包装中添加
/etc/docker。 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 里程碑:
新
- 在 Linux 上将 Buildx 和 BuildKit 设置为默认构建器。
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
runhcsshim 添加支持(默认关闭)。 moby/moby#42089 - 添加
dockerd --validate以检查守护进程 JSON 配置并退出。 moby/moby#42393 - 通过标志或JSON配置为守护程序配置HTTP代理的能力。 moby/moby#42835
- 添加对 RFC 3021 点对点网络(IPv4 /31)和单个主机(IPv4 /32)的支持。对于有 2 个或更少地址的网络,IPAM 不会预留网络和广播地址。 moby/moby#42626
- 为
ipvlan网络驱动添加支持设置ipvlan_flag和使用l3sipvlan_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:为
docker volume添加集群卷(CSI)选项。 docker/cli#3606 - CLI:为
docker stack添加集群卷(CSI)支持。 docker/cli#3662
- CLI:为
- 在
docker stack deploy中为SwarmKit作业添加支持。 docker/cli#2907 - 添加命令
docker stack config以输出由stack deploy使用的合并和插值的配置文件。 docker/cli#3544 - 添加一个新的
docker context show命令,用于打印当前上下文的名称。 docker/cli#3567 - 为支持
--format标志的所有命令添加--format=json的简写变体。 docker/cli#2936 - 为
docker create和docker run命令添加一个--quiet选项,以在拉取镜像时抑制输出。 docker/cli#3377 - 为
docker network rm子命令添加--force选项。即使网络不存在,也会使 CLI 返回 0 退出代码。对服务器端删除网络的程序没有影响。 docker/cli#3547 - 向
--signal选项添加到docker stop和docker restart。 docker/cli#3614 - 向
-v/--version添加docker-proxy标志。 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:向
Swarm、GET /_ping和HEAD /_ping添加Swarm标头,允许单请求检测 Swarm 支持。 moby/moby#42064 - API:向
signal、POST /containers/{id}/stop和POST /containers/{id}/restart添加一个参数,以设置使用的信号。 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.linuxOCI 运行时的支持。 moby/moby#43695 - 移除LCOW(在Windows上的Linux容器)。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 中使用的旧版 overlay 网络相关的守护程序选项。
- 从
dockerd中移除--cluster-xx选项。 moby/moby#40383 - 移除
host-discovery和使用外部 k/v 存储的 overlay 网络。 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(构建 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 - 升级
hcsshimv0.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 类型以重用 runtime-spec,并添加对
ErrnoRet的支持。 moby/moby#42005 - 在
seccomp配置文件中添加对DefaultErrnoRet的支持。 moby/moby#42604 - 在默认的 seccomp 配置文件中显式添加一个
DefaultErrnoRet字段,不改变任何行为。 moby/moby#42649 - 在默认的 seccomp 配置文件中,将
socket与AF_VSOCK进行阻止。 moby/moby#44563 - 重新启用默认 seccomp 配置文件中的
process_vm_readv和process_vm_writev。 moby/moby#42083 - 将与PKU相关的系统调用添加到默认的seccomp配置文件中。 moby/moby#43812
- 允许
clock_settime64与CAP_SYS_TIME配合使用。 moby/moby#43775 - 允许
bpf与CAP_BPF以及perf_event_open与CAP_PERFMON配对。 moby/moby#43988 - 在默认的 seccomp 配置文件中,显式将
clone3系统调用设置为返回ENOSYS,以确保glibc将正确回退到使用clone。 moby/moby#42681
错误修复和功能增强
- 将
overlay2设为默认存储驱动程序(btrfs和zfs现在为可选)。 moby/moby#42661 - 在
docker cp命令中添加加载指示器。 docker/cli#2708 - 弃用
ElectAuthServer函数,并使其在不调用GET /infoAPI 端点的情况下返回默认注册表。 docker/cli#2819 - 回滚Swarm服务时,进度条不再反转。 docker/cli#2940
- 使用
net.JoinHostPort()修复 IPv6 地址的格式化问题。 docker/cli#2972 - CLI 错误消息现在打印到
stderr。 docker/cli#3044 - 提高性能
docker info如果使用仅使用本地信息的自定义--format。通过此更改,CLI 仅在检测到需要来自守护程序的信息时才使用守护程序 API。 docker/cli#3179 - 从
--stop-signal标志中移除默认值,因为它可能无法反映守护程序实际使用的默认值。 docker/cli#3245 - 将 Compose 模式
3.10添加到docker stack;允许省略version字段(结果为latest)。 docker/cli#3257 - Compose 版本
3现在等同于3.x(最新)在docker stack中。 docker/cli#3445 - 修复在 Windows 上以非交互模式运行容器后,
<Ctrl-c>无法退出的问题。 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 - CLI 不再在运行
docker context use并选择当前上下文时创建或更新 CLI 配置文件。 docker/cli#3721 - 运行
docker context rm --force时,现在会忽略不存在的上下文。 docker/cli#3791 - 在 Compose 文件中添加将整数覆盖为
0的能力。 docker/cli#3812 - SIGINT(
<Ctrl-c>)现在会传递给正在运行的容器,而不是导致 CLI 退出。 docker/cli#3849 - 改善
docker port CONTAINER的用户体验,通过在打印前对端口进行排序。 docker/cli#3892 - API:现在使用
Content-type响应头在 API 版本 >= 1.42 时报告正在使用的原始流格式,GET /containers/{id}/logs和POST /containers/{id}/attach已更新。 moby/moby#39812 - 将 Windows 层的默认沙箱大小设置为 127GB,并确保
--storage-opts标志适用于 Windows 上的所有存储。 moby/moby#41636 - 从 containerd 配置文件中移除插件部分(
/var/run/docker/containerd/containerd.toml)。 moby/moby#41675 - 在tar导入期间拒绝
null清单。 moby/moby#41842 - 为插件的自定义运行时添加 shim 配置。 moby/moby#41854
- 容器健康检查现在在守护进程重启后恢复。 moby/moby#41935
- 清理
btrfs驱动程序时,配额不再被禁用。 moby/moby#42273 - 可访问的主机设备现在可以在
--privileged无根容器中挂载。 moby/moby#42638 - 修复在
**/foo中对递归通配符目录模式的处理错误.dockerignore. moby/moby#42676 - 将
docker import --platform扩展以允许将导入的镜像标记为外部架构。 moby/moby#43103 - CPU实时选项的验证现在在守护程序启动时进行,而不是为每个单独的容器执行验证,从而允许启动早期失败。 moby/moby#43131
- 冻结
namesgenerator包,防止新增内容。用户只能满足于现有的25359个形容词-名称组合。 moby/moby#43210 - API:仅将
containers/{id}/attach/ws发送到根据stdin、stdout和stderr参数进行筛选的流,适用于 API 版本 >= 1.42。 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 - 与
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 调用中使用部分注册的容器而导致的空指针解引用和 panic。 moby/moby#44633
- 修复无法创建
DOCKER-USERip6tables 链的问题。 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 rm添加别名docker container remove。 docker/cli#3986
已知问题
apparmor_parser (跟踪问题)
一些 Debian 用户在升级到 23.0 分支后报告了容器无法启动的问题。
错误信息表明问题是由缺少 apparmor_parser Binaries引起的:
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 的内联缓存功能(例如 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 shim 的支持,例如 io.containerd.runsc.v1(gVisor)和 io.containerd.kata.v2(Kata Containers)。
在使用 Kata Containers 运行时,退出一个 exec 会话会停止正在运行的容器,并且如果打开了 TTY,连接的 CLI 会挂起。目前除了避免执行进入运行在 Kata 运行时上的容器之外,没有其他缓解措施。
此问题的根本原因是 Moby 中的一个长期存在的错误。这将在未来的版本中得到解决。请注意,对其他 OCI 运行时的支持是一项新功能,随着更多用户开始使用此功能,可能会发现类似的问题。