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版本的最新变更、新增功能、已知问题和修复。

有关更多信息:

从23.0.0版本开始,Docker Engine不再使用CalVer版本控制,而是开始使用 SemVer版本控制格式。 更改版本格式是实现Go模块兼容性的一个步骤,但该仓库尚未使用Go模块,仍然需要使用“+incompatible”版本。 未来的版本将继续努力实现Go模块的兼容性。

23.0.6

2023-05-08

有关此版本中所有拉取请求和更改的完整列表,请参阅相关的GitHub里程碑:

Bug修复和增强

包装更新

23.0.5

2023-04-26

有关此版本中所有拉取请求和更改的完整列表,请参阅相关的GitHub里程碑:

Bug fixes and enhancements

  • 在修剪卷时添加--all / -a选项。 docker/cli#4229
  • docker info添加--format=jsondocker/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

包装更新

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.

包装更新

23.0.3

2023-04-04

注意

由于CentOS 9 Stream的软件包仓库存在问题,目前无法获取CentOS 9的软件包。CentOS 9的软件包可能会在稍后添加,或者作为下一个(23.0.4)补丁版本的一部分。

Bug修复和增强功能

  • 修复了导致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里程碑:

Bug修复和增强功能

  • 完全解决了在检测到启用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中的一个bug。 moby/moby#45112
  • 当父Swarm作业被移除时,正确清理子任务。 moby/swarmkit#3112, moby/moby#45107
  • 修复Swarm服务创建逻辑,以便可以同时使用GenericResource和非默认网络。 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
  • 修复了一个DNS解析问题,该问题影响了使用--dns-opt--dns-search创建的容器,当在容器外部使用systemd-resolved时。 moby/moby#45000
  • 修复了在处理源自容器内部的DNS查询时记录错误时出现的恐慌。 moby/moby#44980
  • 通过允许用户使用--size=false选择退出大小计算,提高docker ps的速度。 docker/cli#4107
  • 扩展对所有插件的Bash补全支持。 docker/cli#4092
  • 修复当存在由cmd.exe设置的特定环境变量时,docker stack deploy在Windows上失败的问题。 docker/cli#4083
  • 通过将空图像标签视为与相同,为未来的API版本添加前向兼容性。 docker/cli#4065
  • 原子性地写入上下文文件,大大减少损坏的概率,并改进损坏上下文的错误信息。 docker/cli#4063

包装

23.0.1

2023-02-09

有关此版本中所有拉取请求和更改的完整列表,请参阅相关的GitHub里程碑:

Bug修复和增强功能

  • 修复如果内核启用了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

包装

23.0.0

2023-02-01

有关此版本中所有拉取请求和更改的完整列表,请参阅相关的GitHub里程碑:

  • 在Linux上将Buildx和BuildKit设置为默认构建器。 moby/moby#43992
    • docker build别名设置为docker buildx builddocker/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_flag和在ipvlan网络驱动中使用l3s ipvlan_mode的支持。 moby/moby#42542
  • 添加对显示overlay2存储驱动程序的metacopy选项值的支持。 moby/moby#43557
  • 添加支持使用语法IDType://ID描述Windows设备。 moby/moby#43368
  • 添加 RootlessKitslirp4netnsVPNKit 版本报告。 moby/moby#42330
  • 添加对SwarmKit集群卷(CSI)的实验性支持。 moby/moby#41982
  • 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 createdocker run命令添加一个--quiet选项,以在拉取镜像时抑制输出。 docker/cli#3377
  • docker network rm子命令添加一个--force选项。即使网络不存在,也会使CLI返回0退出代码。对服务器端删除网络的程序没有影响。 docker/cli#3547
  • docker stopdocker 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使用STOPSIGNALmoby/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 /_pingHEAD /_ping中添加一个Swarm头,允许通过单次请求检测Swarm支持。 moby/moby#42064
  • API: 添加一个signal参数到POST /containers/{id}/stopPOST /containers/{id}/restart以设置使用的信号。 moby/moby#43206
  • API: 添加一个CreateMountPoint参数到POST /containers/createmoby/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.servicemoby/moby#43107

已移除

已弃用

  • 要求Windows Server RS5 / LTSC 2019(版本17763)作为运行守护程序的最低要求。 moby/moby#43254
  • 弃用 API 版本 >= 1.42 上的 BuilderSizemoby/moby#42608
  • 弃用 BuildCache.Parent,推荐使用新引入的 BuildCache.Parents,适用于 API 版本 >= 1.42。 moby/moby#43908
  • 弃用 pkg/urlutil,将实现移至 builder/remotecontext/urlutilmoby/moby#43477

升级

安全

  • 更改容器hostconfig.json文件的权限为0600(原为0644)。 moby/moby#41620
  • 修复 --seccomp-profile 不接受 unconfined 的问题,并将默认的 seccomp 配置文件重命名为 builtinmoby/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配置文件中使用AF_VSOCK阻止socketmoby/moby#44563
  • 重新启用默认seccomp配置文件中的process_vm_readvprocess_vm_writevmoby/moby#42083
  • 将PKU相关的系统调用添加到默认的seccomp配置文件中。 moby/moby#43812
  • 允许使用CAP_SYS_TIMEclock_settime64moby/moby#43775
  • 允许使用CAP_BPFbpf和使用CAP_PERFMONperf_event_openmoby/moby#43988
  • 在默认的seccomp配置文件中显式设置clone3系统调用返回ENOSYS,以确保glibc能够正确回退到使用clonemoby/moby#42681

Bug fixes and enhancements

  • overlay2提升为默认的存储驱动(btrfszfs现在需要手动选择)。 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 错误信息现在会打印到 stderrdocker/cli#3044
  • 如果使用了仅使用本地信息的自定义--format,则提高docker info的性能。通过此更改,CLI仅在检测到需要来自守护程序的信息时使用守护程序API。 docker/cli#3179
  • --stop-signal标志中移除默认值,因为它可能不反映守护进程实际使用的默认值。 docker/cli#3245
  • 添加Compose schema 3.10docker stack;允许省略version字段(结果为latest)。 docker/cli#3257
  • Compose 版本 3 现在等同于 3.x(最新)在 docker stack 中。 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 listdocker 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 () 现在会传递给正在运行的容器,而不是导致 CLI 退出。 docker/cli#3849
  • 通过排序端口来改善 docker port CONTAINER 的用户体验。 docker/cli#3892
  • API: GET /containers/{id}/logsPOST /containers/{id}/attach 现在在API版本 >= 1.42时,使用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清单。 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的stdinstdoutstderr参数进行流传输。 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
  • 提高docker logs -f在Windows上的可靠性,并防止在local日志驱动程序中丢失换行符。 moby/moby#43294
  • 修复守护进程中由于容器日志缓冲引起的罕见死锁问题。 moby/moby#44856
  • 改进杂项文件系统操作中的错误处理,以便守护进程可以在overlayfs支持的文件系统上启动。 moby/moby#44834
  • 修复了一个问题,当守护进程在无根模式下运行时,--ipc=host 没有被正确处理。 moby/moby#44863
  • 修复了一个长期存在的问题,即陈旧的连接跟踪条目导致容器的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运行时的支持是一项新功能,随着更多用户开始使用此功能,可能会发现类似的问题。