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 的最新更改、新增功能、已知问题和修复。
有关以下内容的更多信息:
- 已弃用和已删除的功能,请参阅已弃用的引擎功能。
- 对 Engine API 的更改,请参阅 Engine API 版本历史记录。
从 23.0.0 版本开始,Docker Engine 不再使用 CalVer 版本控制, 并开始使用 SemVer 版本控制格式。 更改版本格式是实现 Go 模块兼容性的垫脚石, 但仓库尚未使用 Go 模块,并且仍然需要使用 “+incompatible” 版本。 在未来版本中,Go 模块兼容性的工作将继续进行。
23.0.6
2023-05-08有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
错误修复和增强功能
- 修复 vfs 存储驱动程序在 NFS 上不起作用的问题。白鲸/白鲸#45465
打包更新
- 升级 转到
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 日志驱动程序修复日志丢失。白鲸/白鲸#45350
- 修复了 v23.0.4 中引入的回归问题,即如果提供了 fixed-cidr 配置参数但未提供 bip,则 dockerd 会拒绝启动。白鲸/白鲸 #45403
- 修复守护进程启动 moby/moby 时 libnetwork 中出现的 panic 问题#45376
- 修复了在使用
buildx.白鲸/白鲸#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。 - 修复 的 shell 补全
docker compose --filedocker/cli#4177 的 CLI 中。 - 修复因
daemon.json白鲸/白鲸#45246。
打包更新
- 修复 CentOS 9 Stream 缺失的程序包。
- 升级 转到
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。
- 现在报告缺乏对加密覆盖网络的内核支持 作为错误。
- 加密的覆盖网络是热切建立的,而不是等待 要附加的多个节点。
- 加密的覆盖网络现在可以在 Red Hat Enterprise Linux 9 上使用
通过使用
xt_bpfkernel 模块。 - Swarm 叠加网络的用户应查看 GHSA-vwm3-crmr-xfxw,以确保没有发生意外暴露。
打包更新
23.0.2
2023-03-28有关此版本中拉取请求和更改的完整列表,请参阅相关的 GitHub 里程碑:
错误修复和增强功能
- 完全解决 的缺失检查
apparmor_parser当检测到启用了 AppArmor 的内核时。containerd/containerd#8087、moby/moby#45043 - 确保在生成 BuildKit buildinfo 时从 Git URL 中编辑凭证。修复 CVE-2023-26054。白鲸/白鲸#45110
- 修复由
VOLUME行。白鲸/白鲸#45159 - 修复了在删除 Swarm 节点上的卷期间无法正确传播错误的问题。白鲸/白鲸#45155
- 临时解决 BuildKit 中的错误
COPY --link通过禁用 mergeOp/diffop 优化。白鲸/白鲸#45112 - 在删除父 Swarm 作业时正确清理子任务。白鲸/蜂群套件#3112、白鲸/白鲸#45107
- 修复 Swarm 服务创建逻辑,以便 GenericResource 和非默认网络可以一起使用。白鲸/蜂群套件#3082、白鲸/白鲸#45107
- 修复 Swarm CSI 支持要求 CSI 插件提供暂存终端节点才能发布卷的问题。白鲸/SwarmKit#3116、白鲸/白鲸#45107
- 修复部分配置中日志缓冲导致的 panic。containerd/fifo#47、moby/moby#45051
- 在调试级别记录 REST 到 Swarm gRPC API 转换层中的错误,以减少冗余和噪音。白鲸/白鲸#45016
- 修复影响使用
--dns-opt或--dns-search什么时候systemd-resolved在容器外部使用。白鲸/白鲸#45000 - 修复了在处理源自容器内部的 DNS 查询时记录错误时出现的 panic。白鲸/白鲸#44980
- 提高速度
docker ps允许用户选择退出大小计算--size=false.docker/cli #4107 - 将对 Bash 补全的支持扩展到所有插件。docker/cli #4092
- 修复
docker stack deploy在 Windows 上失败时,当cmd.exe存在。docker/cli #4083 命令 - 通过将空 image 标签视为与
<none>.docker/cli 的 #4065 - 以原子方式编写上下文文件,以大大降低损坏的可能性,并改进损坏上下文的错误消息。docker/cli #4063
包装
- 升级 转到
1.19.7.docker/docker-ce-packaging#857、docker/cli#4086、moby/moby#45137 - 升级
containerd自v1.6.19.白鲸/白鲸 #45084、白鲸/白鲸 #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不可用。白鲸/白鲸#44942 - 修复了启用了 BuildKit 的内联缓存构建导致守护程序崩溃的问题。白鲸/白鲸#44944
- 修复了 BuildKit 无法正确加载由先前版本创建的缓存层的问题。白鲸/白鲸#44959
- 修复
ipvlan在升级之前创建的网络会阻止守护程序启动。白鲸/白鲸#44937 - 修复
overlay2存储驱动程序在早期失败metacopytesting 在不支持的后备文件系统上初始化时。白鲸/白鲸 #44922 - 修复
execexit 事件在某些运行时(如 Kata Containers)下被误解为容器 exit。白鲸/白鲸 #44892 - 改进 API 在请求中途挂起导致收到截断的 JSON 响应时,CLI 返回的错误消息。docker/cli #4004
- 修复在尝试执行带有
runc使用 Go 1.20 编译。docker/cli #4004 - 修复 size 参数的误处理
--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 上的默认构建器。白鲸/白鲸#43992
- 别名
docker build自docker buildx build.docker/cli 的 #3314 - 旧版构建器仍可通过显式设置
DOCKER_BUILDKIT=0. - BuildKit 和旧版构建器处理多阶段构建的方式存在差异。有关更多信息,请参阅多阶段构建。
- 别名
- 添加对拉取的支持
zstd压缩层。白鲸/白鲸 #41759、白鲸/白鲸 #42862 - 在 Linux 上添加对备用 OCI 运行时的支持,与 containerd 运行时 v2 API 兼容。白鲸/白鲸 #43887、白鲸/白鲸 #43993
- 添加对 containerd 的支持
runhcsWindows 上的 shim(默认关闭)。白鲸/白鲸#42089 - 加
dockerd --validate检查守护进程 JSON 配置并退出。白鲸/白鲸#42393 - 添加通过标志或 JSON 配置配置守护程序的 HTTP 代理的功能。白鲸/白鲸 #42835
- 添加了对 RFC 3021 点对点网络 (IPv4 /31s) 和单个主机 (IPv4 /32s) 的支持。对于具有两个或更少地址的网络,IPAM 不会保留网络和广播地址。白鲸/白鲸#42626
- 添加对设置
ipvlan_flag并使用l3sipvlan_mode在ipvlan网络驱动程序。白鲸/白鲸#42542 - 添加了对显示
metacopy选项overlay2storage 驱动程序。白鲸/白鲸#43557 - 添加了对使用语法描述 Windows 设备的支持
IDType://ID.白鲸/白鲸 #43368 - 加
RootlessKit,slirp4netns和VPNKit版本报告。白鲸/白鲸#42330 - 添加对 SwarmKit 集群卷 (CSI) 的实验性支持。白鲸/白鲸#41982
- CLI:将集群卷 (CSI) 选项添加到
docker volume.docker/cli 命令 #3606 - CLI:将集群卷 (CSI) 支持添加到
docker stack.docker/cli 命令 #3662
- CLI:将集群卷 (CSI) 选项添加到
- 在 中添加对 SwarmKit 作业的支持
docker stack deploy.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 - 添加
--quiet选项设置为docker create和docker run命令在拉取镜像时禁止输出。docker/cli 命令 #3377 - 添加
--force选项设置为docker network rm子命令。使 CLI 返回 0 退出代码,即使网络不存在。对用于删除网络的服务器端过程没有影响。docker/cli 命令 #3547 - 添加
--signal选项设置为docker stop和docker restart.docker/cli 的 #3614 - 添加
-v/--versionflag 设置为docker-proxy.白鲸/白鲸 #44703 - 现在,当守护程序以无根模式运行时,会在已知的用户级路径中发现插件。白鲸/白鲸#44778
- 守护程序现在可以正常处理 JSON 配置文件中的常见备用 JSON 编码,并报告有用的错误。白鲸/白鲸 #44777、白鲸/白鲸 #44832
- 接受带有字节顺序标记的 UTF-8。
- 接受带有字节顺序标记的 UTF-16。
- 无效的 UTF-8 会提前报告,并显示可理解的错误消息。
- 允许使用
STOPSIGNAL通过docker commit.白鲸/白鲸 #43369 - 向
awslogslog 驱动程序以允许跳过 CloudWatch 中的日志流创建。白鲸/白鲸#42132 - 向
awslogslog 驱动程序以指定发送到 CloudWatch 的日志格式。白鲸/白鲸#42838 - 向
fluentdlog 驱动程序设置重新连接间隔。白鲸/白鲸#43100 - 向 Go API 客户端添加新的 options-setter:
WithTLSClientConfigFromEnv(),WithHostFromEnv()和WithVersionFromEnv().白鲸/白鲸#42224 - 通过
docker completion子命令。docker/cli 命令 #3429 - API:添加
Swarmheader 设置为GET /_ping和HEAD /_ping,允许对 Swarm 支持进行单请求检测。白鲸/白鲸#42064 - API:添加
signal参数设置为POST /containers/{id}/stop和POST /containers/{id}/restart以设置使用的信号。白鲸/白鲸#43206 - API:添加
CreateMountPoint参数设置为POST /containers/create.白鲸/白鲸 #43484 - API:添加
shared-size参数设置为GET /images/json启用镜像的共享大小计算。白鲸/白鲸#42531 - API:添加
type参数设置为GET /system/df来控制在计算磁盘使用情况时要考虑的对象类型。白鲸/白鲸#42559 - systemd:使用 systemd 管理的 containerd,而不是守护进程管理的 containerd。白鲸/白鲸#42373
- systemd:启动
docker.service后time-set.target.白鲸/白鲸#43107
删除
- 删除对读取 Configuration 的支持
~/.dockercfg.docker/cli #2504- 此位置自 1.7.0 起已弃用。
- 弃用通知
- 删除
-g和--graph守护进程选项,以支持--data-root.docker/cli 中的问题 #3739- 这些选项自 17.05 起已被隐藏和弃用。
- 弃用通知
- 删除结果的客户端排序,以支持搜索 API 的返回顺序。docker/cli 命令 #3470
- 从 CLI 中删除与已弃用的存储驱动程序相关的警告。警告现在由守护程序处理。docker/cli 命令 #3542
- 删除
Experimentalclient 字段docker version.docker/cli 的 #3543 - 需要明确选择加入才能使用已弃用的存储驱动程序,并且在升级时不自动选择它们。白鲸/白鲸#43378
- 删除对 的已弃用支持
overlay和overlay2后备文件系统上的存储驱动程序,没有d_type支持。白鲸/白鲸 #43472 - 移除已弃用的
overrideKernelCheck选项overlay2storage 驱动程序。moby/moby#44279 弃用通知 - 删除对已弃用
io.containerd.runtime.v1.linuxOCI 运行时。白鲸/白鲸 #43695 - 删除 LCOW(Windows 上的 Linux 容器)。白鲸/白鲸#42451, 白鲸/白鲸#42499, 白鲸/白鲸#42506, 白鲸/白鲸#42511, 白鲸/白鲸#42520, 白鲸/白鲸#42683, 白鲸/白鲸#42684, 白鲸/白鲸#42685、moby/moby#43187
- LCOW 在 17.09 中作为技术预览版引入,并在 20.10 中弃用。
- 弃用通知
- 删除与独立 Swarm 一起使用的传统覆盖网络相关的守护程序选项。
- 删除
--cluster-xx选项来自dockerd.白鲸/白鲸#40383 - 删除
host-discovery以及将网络与外部 K/V 存储叠加在一起。白鲸/白鲸#42247 - 弃用通知
- 删除
- 移除已弃用的
armplatform fallback 的 shell 中。--platform linux/arm/vY现在将返回错误arm/vY不可用,而不是拉取错误的镜像。白鲸/白鲸#44414 - 移除已弃用的
SetCustomHTTPHeaders(),CustomHTTPHeaders()options-setters 的 API 中。白鲸/白鲸#42694 - 移除已弃用的
WithDialer()option-setter 的 API 中。白鲸/白鲸#44022- 用
WithDialContext()相反。
- 用
- 删除 的守护进程实现
opts.QuotedString.实现已移至 CLI。白鲸/白鲸 #43250 - 从守护程序中的 trust-key 中删除单独的守护程序 ID,并禁用生成信任密钥。白鲸/白鲸#43555
- API:删除已弃用的
KernelMemoryoption fromPOST /containers/create在 API 版本 >= 1.42 上。白鲸/白鲸 #43214
荒废的
- 至少需要 Windows Server RS5 / LTSC 2019(内部版本 17763)才能运行守护程序。白鲸/白鲸#43254
- 废弃
BuilderSize在 API 版本 >= 1.42 上。白鲸/白鲸#42608 - 废弃
BuildCache.Parent支持新引入的BuildCache.Parents在 API 版本 >= 1.42 上。白鲸/白鲸#43908 - 废弃
pkg/urlutil,将实现移至builder/remotecontext/urlutil.白鲸/白鲸#43477
升级
- 升级 转到
1.19.5.docker/cli#3958、moby/moby#44794 - 升级
rootlesskit自v0.14.4.白鲸/白鲸#42708 - 升级
buildkit自v0.10.6.白鲸/白鲸#43239 - 升级
buildx自v0.10.2.docker/docker-ce-packaging的 #840 - 升级
swarmkit自v2.0.0-20230119195359-904c221ac281.白鲸/白鲸 #44858 - 升级
containerd自v1.6.16.白鲸/白鲸#44766、白鲸/白鲸#44769、白鲸/白鲸#44881 - 升级
runc自v1.1.4.白鲸/白鲸#44039 - 升级
hcsshimv0.9.6.白鲸/白鲸#44658 - 这
btrfs存储驱动程序现在依赖于 Linux 内核头文件 (>= 4.12) 而不是 btrfs-progs 的头文件。白鲸/白鲸#44776
安全
- 更改容器的权限
hostconfig.jsonfiles 设置为0600(是0644).白鲸/白鲸#41620 - 修复
--seccomp-profile不接受unconfined并将默认 seccomp 配置文件重命名为builtin.白鲸/白鲸#42481 - 始终使用 seccomp 支持进行构建,并删除
seccompbuild 标签。白鲸/白鲸#42501 - 在 上添加 seccomp 支持
riscv64.白鲸/白鲸#43553 - 添加了对设置传递给
seccomp(2)在 seccomp 配置文件中。白鲸/白鲸#42648 - 重构 seccomp 类型以重用 runtime-spec,并添加对
ErrnoRet.白鲸/白鲸#42005 - 添加对
DefaultErrnoRet在seccomp配置 文件。白鲸/白鲸 #42604 - 添加显式
DefaultErrnoRet字段设置为默认的 secComp 配置文件,且行为没有变化。白鲸/白鲸#42649 - 块
socket跟AF_VSOCK在默认的 seccomp 配置文件中。白鲸/白鲸#44563 - 重新启用
process_vm_readv和process_vm_writev在默认的 seccomp 配置文件中。白鲸/白鲸#42083 - 将与 PKU 相关的系统调用添加到默认 seccomp 配置文件中。白鲸/白鲸#43812
- 允许
clock_settime64跟CAP_SYS_TIME.白鲸/白鲸 #43775 - 允许
bpf跟CAP_BPF和perf_event_open跟CAP_PERFMON.白鲸/白鲸#43988 - 显式设置
clone3syscall 返回ENOSYS在默认的 seccomp 配置文件中,为了确保glibc将正确回退到使用clone.白鲸/白鲸#42681
错误修复和增强功能
- 促进
overlay2作为默认存储驱动程序 (btrfs和zfs现在是选择加入的)。白鲸/白鲸#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 - 编写版本
3现在等效于3.x(最新) 在docker stack.docker/cli 命令 #3445 - 修复
<Ctrl-c>hanging on Windows 以在非交互模式下运行容器后退出。docker/cli 的 #3302 - 将相对源路径添加到
run命令中的-v/--volume和-m/--mount标志。docker/cli 的 #3469 docker exec -t现在,在创建已执行流程时,会立即设置该流程的控制台大小。docker/cli 命令 #3627- 更新 pretty-print 格式
docker info以提供有关已安装插件的更多详细信息。docker/cli 的 #3645 - 打印
docker context list和docker context use命令。docker/cli 的 #3668 - 添加自定义
aliases可用于打印命令的所有可用别名的注释。docker/cli #3694 - CLI 在运行时不再创建或更新 CLI 配置文件
docker context use并选择当前上下文。docker/cli 命令 #3721 - 现在,在运行时会忽略不存在的上下文
docker context rm --force.docker/cli 命令 #3791 - 添加了将整数覆盖为
0在 Compose files 中。docker/cli 命令 #3812 - 信号 (
<Ctrl-c>) 现在传递到正在运行的容器,而不是导致 CLI 退出。docker/cli 命令 #3849 - 提高
docker port CONTAINERUX 通过在打印前对端口进行排序。docker/cli 命令 #3892 - 应用程序接口:
GET /containers/{id}/logs和POST /containers/{id}/attach现在使用Content-typeAPI 版本 >= 1.42 的响应标头。白鲸/白鲸#39812 - 将 Windows 图层的默认沙箱大小设置为 127GB,并确保
--storage-opts标志适用于 Windows 上的所有存储。白鲸/白鲸#41636 - 从 containerd 配置文件中删除 plugin 部分 (
/var/run/docker/containerd/containerd.toml).白鲸/白鲸#41675 - 拒绝
null在 tar 导入期间出现。白鲸/白鲸#41842 - 为插件的自定义运行时添加 shim 配置。白鲸/白鲸#41854
- 现在,当守护程序重新启动时,容器运行状况检查会恢复。白鲸/白鲸#41935
- 在清理
btrfs司机。白鲸/白鲸#42273 - 可访问的主机设备现在可以挂载在
--privileged无根容器。白鲸/白鲸#42638 - 修复
**/foo中的递归通配符目录模式.dockerignore.白鲸/白鲸#42676 - 扩展
docker import --platform以允许将导入的镜像标记为外部体系结构。白鲸/白鲸 #43103 - 现在,在守护程序启动时执行 CPU 实时选项的验证,而不是对每个单独的容器执行验证,从而允许启动提前失败。白鲸/白鲸#43131
- 冻结
namesgeneratorpackage 来防止新增内容。用户必须对现有的 25359 个形容词-名称组合感到满意。白鲸/白鲸 #43210 - 应用程序接口:
containers/{id}/attach/ws仅根据stdin,stdout和stderrAPI 版本 >= 1.42 上的参数。白鲸/白鲸 #43322 - 修复了在持续流量下重启容器后容器中的 UDP 流量无法正常工作的问题。白鲸/白鲸 #43409
- 添加了对使用最新版本的 Go、GCC、LLVM 和其他编译器工具支持的自定义 amd64 微架构功能级别拉取镜像的支持。白鲸/白鲸 #43434
- 改进 API 中无效 JSON 请求的验证。白鲸/白鲸 #43463
- 减轻慢的影响
exec从运行状况检查开始。检查超时现在仅适用于运行状况检查命令运行的持续时间。启动命令所需的时间不再计入超时。白鲸/白鲸 #43480 - 安慰
ttysize 在创建时立即设置。白鲸/白鲸 #43593、白鲸/白鲸 #43622 - 修复
overlay2容器启动失败或守护程序关闭后未清理挂载。白鲸/白鲸#43659 - 将清单列表解析与
containerd.白鲸/白鲸#43675 - 跳过使用
firewalld用于 networking,当守护程序以无根模式运行时。白鲸/白鲸 #43813 - 现在,如果 Windows 上缺少守护程序重新启动,则会在守护程序重新启动后重新创建自定义 NAT 网络。白鲸/白鲸#43858
- 修复了在容器运行状况检查进程超时时终止该进程的问题。白鲸/白鲸#43994
- 修复
live-restore使用重启策略和卷引用。白鲸/白鲸 #44237 - API:现在,在 API 版本 >= v1.42 上默认仅修剪匿名卷。传递过滤器
all=true除了 Anonymous 之外,还删除命名卷。白鲸/白鲸#44259 - API:支持
GET /system/df端点。白鲸/白鲸#42715 - 提高守护进程转储堆栈并在发送 SIGQUIT 时以代码 2 退出的可靠性。白鲸/白鲸 #44831
- 提高
docker logs -f,并防止在 Windows 上的locallog 驱动程序。白鲸/白鲸#43294 - 修复了由缓冲容器日志导致的守护进程中罕见的死锁。白鲸/白鲸#44856
- 改进 misc 文件系统作中的错误处理,以便守护程序可以在 overlayfs 后备文件系统上启动。白鲸/白鲸#44834
- 修复
--ipc=host当守护程序以无根模式运行时,未正确处理。白鲸/白鲸#44863 - 修复了一组长期存在的问题,这些问题导致过时的 conntrack 条目导致容器的 UDP 流量路由错误。白鲸/白鲸 #44752
- 修复了 API 中列出的半注册容器,以及因在 API 调用中使用部分注册的容器而导致的 nil 指针取消引用和恐慌。白鲸/白鲸#44633
- 修复创建
DOCKER-USERip6tables 链。白鲸/白鲸#44845 - 修复了当
ip6tables命令不可用。白鲸/白鲸#44727 - 修复了启用 userland 代理后某些 iptables NAT 规则未清理的问题。白鲸/白鲸#44811
- 在极少数情况下,修复可能泄漏的进程,即清理启动容器的失败尝试处理不当。白鲸/白鲸#44400
- 修复
CreatedAt反映 initialization 而不是 creation 的卷的时间。白鲸/白鲸#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 中的某些行而导致部分缓存失效,则仍然有效和以前缓存的层将无法正确加载。
这通常表现为应该出现在镜像中的文件,但并不存在于RUN阶段或任何其他引用文件的阶段,在更改 Dockerfile 中的某些行后:
[+] 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 填充程序的支持,例如io.containerd.runsc.v1(gVisor) 和io.containerd.kata.v2(Kata Containers)。
使用 Kata Containers 运行时时,退出execsession 会停止正在运行的容器,如果打开了 TTY,则会挂起连接的 CLI。目前,除了避免执行到 Kata 运行时上运行的容器之外,没有缓解措施。
此问题的根本原因是 Moby 中长期存在的错误。此问题将在将来的版本中得到解决。请注意,支持备用 OCI 运行时是一项新功能,随着更多用户开始使用此功能,可能会发现类似问题。