首页
/ Docker Build-Push-Action中BUILDX_NO_DEFAULT_ATTESTATIONS失效问题分析

Docker Build-Push-Action中BUILDX_NO_DEFAULT_ATTESTATIONS失效问题分析

2025-06-11 05:48:40作者:申梦珏Efrain

问题背景

在Docker多架构镜像构建过程中,用户发现从docker/build-push-action v5.3.0版本开始,环境变量BUILDX_NO_DEFAULT_ATTESTATIONS=1不再生效。这个问题导致使用docker manifest create命令创建多架构镜像清单时出现"is a manifest list"错误。

问题现象

当用户使用v5.3.0及以上版本的build-push-action时,即使设置了BUILDX_NO_DEFAULT_ATTESTATIONS=1环境变量,构建过程中仍然会自动添加provenance参数,导致生成的镜像包含不必要的证明数据(attestation)。而在v5.2.0版本中,该环境变量能正常工作,不会添加这些证明数据。

技术分析

证明数据(Attestation)的作用

证明数据是BuildKit提供的一种机制,用于记录构建过程的元数据,包括构建环境、依赖项等信息。这些数据可以帮助验证镜像的真实性和构建过程的可信度。

问题根源

通过分析版本变更,发现问题源于actions-toolkit从v0.18.0升级到v0.19.0时,BuildKit版本检测逻辑发生了变化。在v5.3.0之前,由于版本检测不准确,导致即使BuildKit版本≥0.11.0,也不会自动添加证明数据。

更新后,BuildKit版本检测正确,当检测到版本≥0.11.0时,会自动添加provenance参数。然而,这个逻辑没有考虑BUILDX_NO_DEFAULT_ATTESTATIONS环境变量的设置,导致用户显式禁用证明数据的行为被忽略。

影响范围

该问题影响从v5.3.0开始的所有版本,包括最新的v6.x系列。对于需要后续使用docker manifest命令处理镜像的用户,这个问题会导致操作失败。

解决方案

项目维护者已经确认这是一个需要修复的问题。建议的修复方案是:

  1. 在判断是否添加provenance参数时,同时检查BUILDX_NO_DEFAULT_ATTESTATIONS环境变量
  2. 如果该变量设置为1,即使BuildKit版本支持,也不应自动添加证明数据

临时解决方案

对于受影响的用户,在官方修复发布前,可以采取以下临时方案:

  1. 暂时降级到v5.2.0版本
  2. 在构建命令中显式添加--provenance=false参数
  3. 避免使用docker manifest命令,改用其他方式创建多架构镜像

总结

这个问题展示了环境变量与构建参数优先级处理的重要性。在开发类似的构建工具时,需要确保显式用户设置能够覆盖工具的默认行为。对于Docker多架构镜像构建工作流的用户,理解证明数据的作用和影响至关重要,特别是在需要后续处理镜像的场景中。

随着容器安全要求的提高,证明数据等安全特性会越来越普遍,但工具应该提供清晰的禁用机制,以满足不同场景的需求。

登录后查看全文
热门项目推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
596
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K