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修复和增强
- 修复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里程碑:
Bug fixes and enhancements
- 在修剪卷时添加
--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)补丁版本的一部分。
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
包装
- 升级 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里程碑:
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
包装
- 将
/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里程碑:
新
- 在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 /31s)和单主机(IPv4 /32s)的支持。对于具有两个或更少地址的网络,IPAM不会保留网络和广播地址。 moby/moby#42626
- 添加对设置
ipvlan_flag和在ipvlan网络驱动中使用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: 添加集群卷(CSI)选项到
docker volume。 docker/cli#3606 - CLI: 添加集群卷(CSI)支持到
docker stack。 docker/cli#3662
- CLI: 添加集群卷(CSI)选项到
- 在
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: 添加一个
signal参数到POST /containers/{id}/stop和POST /containers/{id}/restart以设置使用的信号。 moby/moby#43206 - API: 添加一个
CreateMountPoint参数到POST /containers/create。 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
- 移除与独立Swarm使用的旧版覆盖网络相关的守护进程选项。
- 从
dockerd中移除--cluster-xx选项。 moby/moby#40383 - 移除
host-discovery和带有外部键/值存储的覆盖网络。 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 - 弃用
BuildCache.Parent,推荐使用新引入的BuildCache.Parents,适用于 API 版本 >= 1.42。 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配置文件中使用
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
Bug fixes and enhancements
- 将
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 - 如果使用了仅使用本地信息的自定义
--format,则提高docker info的性能。通过此更改,CLI仅在检测到需要来自守护程序的信息时使用守护程序API。 docker/cli#3179 - 从
--stop-signal标志中移除默认值,因为它可能不反映守护进程实际使用的默认值。 docker/cli#3245 - 添加Compose schema
3.10到docker 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 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 (
) 现在会传递给正在运行的容器,而不是导致 CLI 退出。 docker/cli#3849 - 通过排序端口来改善
docker port CONTAINER的用户体验。 docker/cli#3892 - API:
GET /containers/{id}/logs和POST /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的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 - 将清单列表解析与
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-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 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运行时的支持是一项新功能,随着更多用户开始使用此功能,可能会发现类似的问题。