GitHub容器镜像推送失败:401未授权问题排查求助
以下是几种可能触发该错误的情况及对应排查方向:
镜像命名空间不匹配
检查镜像标签是否符合GHCR规范格式:ghcr.io/<用户名>/<镜像名>:<标签>。如果工作流所在仓库的所有者不是test-user,默认的GITHUB_TOKEN没有权限推送到不属于当前所有者的镜像空间,必须保证标签中的用户名与github.repository_owner一致。GITHUB_TOKEN权限范围不足
即使开启了Workflow写入权限,仍需确认仓库的Workflow权限配置:进入仓库「Settings」→「Actions」→「General」,确保「Workflow permissions」设置为Read and write permissions,部分组织仓库还需额外确认是否有全局权限限制。跨仓库推送权限缺失
如果工作流所在仓库和目标GHCR仓库不属于同一所有者(跨个人/组织推送),默认的GITHUB_TOKEN不具备跨仓库权限,此时需要使用个人访问令牌(PAT),并为PAT赋予write:packages和read:packages权限,将其存入仓库Secrets后替换工作流中的GITHUB_TOKEN。临时服务或令牌异常
GitHub的GITHUB_TOKEN是临时生成的令牌,偶尔会出现生成异常或服务波动的情况,可尝试手动重新触发工作流,排除临时故障。镜像仓库权限配置错误
进入GitHub的「Packages」页面,查看目标镜像仓库的权限设置,确认工作流所在仓库的服务账户被赋予了写入权限,同时检查镜像仓库是否存在配额超限、被限制的状态。
快速验证步骤
- 确认
steps.meta.outputs.tags生成的标签是完整的ghcr.io/${{ github.repository_owner }}/bar:1.8.2格式。 - 尝试重新触发工作流,排除临时故障。
- 若为跨仓库推送,替换为具备对应权限的PAT进行测试。
内容的提问来源于stack exchange,提问作者Daniel Stephens

