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 里程碑:

错误修复和功能增强

软件包更新

23.0.5

2023-04-26

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

错误修复和功能增强

  • 在清理卷时添加 --all / -a 选项。 docker/cli#4229
  • 添加 --format=json 用于 docker infodocker/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

软件包更新

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

软件包更新

23.0.3

2023-04-04

注意

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

错误修复和功能增强

  • 修复了若干可能导致 Swarm 加密覆盖网络无法维持其安全保证的问题,涉及 CVE-2023-28841CVE-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-26054moby/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

打包

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

打包

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 /31)和单个主机(IPv4 /32)的支持。对于有 2 个或更少地址的网络,IPAM 不会预留网络和广播地址。 moby/moby#42626
  • ipvlan 网络驱动添加支持设置 ipvlan_flag 和使用 l3s ipvlan_modemoby/moby#42542
  • 添加对显示 overlay2 存储驱动程序的 metacopy 选项值的支持。 moby/moby#43557
  • 添加对使用语法 IDType://ID 描述 Windows 设备的支持。 moby/moby#43368
  • 添加版本报告的RootlessKitslirp4netnsVPNKitmoby/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 标志的所有命令添加 --format=json 的简写变体。 docker/cli#2936
  • docker createdocker run 命令添加一个 --quiet 选项,以在拉取镜像时抑制输出。 docker/cli#3377
  • docker network rm 子命令添加 --force 选项。即使网络不存在,也会使 CLI 返回 0 退出代码。对服务器端删除网络的程序没有影响。 docker/cli#3547
  • --signal 选项添加到 docker stopdocker restartdocker/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 使用 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:向 SwarmGET /_pingHEAD /_ping 添加 Swarm 标头,允许单请求检测 Swarm 支持。 moby/moby#42064
  • API:向 signalPOST /containers/{id}/stopPOST /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.servicemoby/moby#43107

已移除

已弃用

  • 需要 Windows Server RS5 / LTSC 2019(构建 17763)作为运行守护程序的最低版本。 moby/moby#43254
  • 弃用 API 版本 >= 1.42 上的 BuilderSizemoby/moby#42608
  • 弃用 API 版本 >= 1.42 中新引入的 BuildCache.Parent,改用 BuildCache.Parentsmoby/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 配置文件中,将 socketAF_VSOCK 进行阻止。 moby/moby#44563
  • 重新启用默认 seccomp 配置文件中的 process_vm_readvprocess_vm_writevmoby/moby#42083
  • 将与PKU相关的系统调用添加到默认的seccomp配置文件中。 moby/moby#43812
  • 允许 clock_settime64CAP_SYS_TIME 配合使用。 moby/moby#43775
  • 允许 bpfCAP_BPF 以及 perf_event_openCAP_PERFMON 配对。 moby/moby#43988
  • 在默认的 seccomp 配置文件中,显式将 clone3 系统调用设置为返回 ENOSYS,以确保 glibc 将正确回退到使用 clonemoby/moby#42681

错误修复和功能增强

  • 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
  • 提高性能 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 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(<Ctrl-c>)现在会传递给正在运行的容器,而不是导致 CLI 退出。 docker/cli#3849
  • 改善 docker port CONTAINER 的用户体验,通过在打印前对端口进行排序。 docker/cli#3892
  • API:现在使用 Content-type 响应头在 API 版本 >= 1.42 时报告正在使用的原始流格式,GET /containers/{id}/logsPOST /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 发送到根据 stdinstdoutstderr 参数进行筛选的流,适用于 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-restoremoby/moby#44237
  • API:在 API 版本 >= v1.42 上,默认情况下仅清理匿名卷。若要同时清理命名卷和匿名卷,请传递过滤器 all=truemoby/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-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 rm 添加别名 docker container removedocker/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 运行时的支持是一项新功能,随着更多用户开始使用此功能,可能会发现类似的问题。