综合 Docker Engine 29:最低 API 版本抬到 v1.44,读取 /events 的脚本需要修改字段名

2026-11-08 21:06:18

Docker Engine 29:最低 API 版本抬到 v1.44,读取 /events 的脚本需要修改字段名

29.0.0 的定位

29.0.0 于 2025-11-10 发布。daemon 实测支持 nftables(firewall-backend=nftables);containerd image store 成为全新安装的默认存储(配置了 userns-remap 的 daemon 除外,moby#47377);版本包含多项 breaking changes 与弃用项。

最低 API 版本抬到 v1.44

daemon 现在要求 API 版本 v1.44 或更高,对应 Docker v25.0+(moby#51186)。客户端侧也同步移除了对 < v1.44 的版本协商(moby#51119),因此不会存在“降级协商到旧版本”的自动兼容处理。

这条改动主要影响以下几类客户端:

  • 自研客户端在 URL 中固定写入具体版本号,例如直接请求 /v1.43/containers/json;
  • 依赖旧版 SDK、而该 SDK 内部仍按低于 v1.44 的版本发起请求;
  • 启动时先读取一次 /version 取得 ApiVersion 并缓存,之后长期复用该值的脚本。

哪些 SDK 版本已经开始请求 v1.44,release note 没有逐条列出,需要按自己锁定的 SDK 版本自行验证。

低于 v1.44 的请求会被 daemon 拒绝。具体的 HTTP 状态码与错误文本未在信源中给出,需要拿实际客户端请求一次确认,不要按记忆中的报错字符串写进监控规则。

怎么查当前客户端 API 版本

常规做法是执行 docker version,输出里分别有 Client 与 Server 的 API version 字段;不看 CLI 的话,直接请求 unix socket 的 /version,读返回 JSON 里的 ApiVersion:

curl -s --unix-socket /var/run/docker.sock http://localhost/version | jq .ApiVersion

字段名以实际输出为准。若要把工具升级到基线上,目标就是让这个值 ≥ 1.44。

/events 不再返回 status、id、from

这三个字段在 API v1.22 就已弃用,但一直保留在响应里;现在使用 API v1.52 或更高时会省略(moby#50832)。仍在读取这三个字段的事件消费脚本会拿到空值。

替代方式是使用事件对象上的 Type、Action、Actor。改造前后的对应关系:

旧字段新取法
idActor.ID
statusAction
fromActor.Attributes 中的镜像信息

CLI 侧格式化输出示例:

# 旧
docker events --format '{{.ID}} {{.Status}} {{.From}}'

# 新
docker events --format '{{.Actor.ID}} {{.Type}} {{.Action}}'

直接消费 /events 流时,用 jq 取字段:

curl -s --unix-socket /var/run/docker.sock http://localhost/events \
  | jq -c '{type, action, id: .Actor.ID, attrs: .Actor.Attributes}'

注意 Action 是字符串(如 start、die),而 status 在旧版里有时带附加信息(如 exec_start: sh),拼接逻辑需要重新对齐。上述模板字段名请以本机 docker events --help 与实际返回 JSON 为准。

同版本内其他 API 移除项

  • api/types/network:CreateRequest 移除 CheckDuplicate 字段。
  • api/types/system:移除 DiskUsage.BuilderSize。
  • 引擎此前会为空 PortBindings 列表回填一个空 HostIP、HostPort 的 PortBinding,该行为在 API 1.52 弃用,1.53 去掉(moby#50874)。
  • client:移除 ImageBuildResponse.OSType、ImageListOptions.ContainerCount。
  • api/types/image:InspectResponse 移除 VirtualSize、Container、ContainerConfig、Parent、DockerVersion。
  • 移除 NetworkSettingsBase、DefaultNetworkSettings 结构体,未弃用的字段并入 NetworkSettings。
  • POST /images/{name}/push 移除了对 API v1.4 auth-config 的兼容(moby#50371)。

另外两项与代码集成方式有关:Go 模块 github.com/docker/docker 弃用,改用 github.com/moby/moby/client 与 github.com/moby/moby/api,github.com/moby/moby 视为内部实现细节;从 v29 起 release tag 带 docker- 前缀(docker-v29.0.0)。

链接

复制全文 生成海报 Docker 运维 接口对接

推荐文章

程序员茄子在线接单