Windows自托管GitHub Action推送Docker镜像至GHCR失败
解决Windows自托管Runner推送镜像到GHCR的x509证书问题
问题分析
日志中的x509: certificate signed by unknown authority表明Docker Buildx在推送镜像时无法验证GHCR的SSL证书。虽然本地Docker可以正常操作,但GitHub自托管Runner默认使用的docker-container驱动环境没有继承主机的证书配置,导致证书验证失败。
解决方案
1. 切换Buildx使用Docker主机驱动
将Buildx的驱动从默认的docker-container改为docker,让Buildx直接复用主机Docker daemon的证书配置,和本地操作环境保持一致:
修改YAML中的Set up Docker Buildx步骤:
- name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 with: driver: docker
2. 检查Runner账户的证书存储
如果上述方法无效,确认Runner运行的系统账户已导入必要的根证书:
- 若Runner使用普通用户账户,打开
certmgr.msc(用户证书管理器) - 若Runner使用系统账户,打开
certlm.msc(本地机器证书管理器) - 将GHCR的SSL证书或企业代理的根证书导入到受信任的根证书颁发机构目录下
3. 临时禁用证书验证(仅测试用)
若需快速验证问题是否由证书引起,可在构建步骤中临时关闭证书验证(不建议生产环境使用):
- name: Build and push uses: docker/build-push-action@v3 with: context: . push: true file: docker/Dockerfile target: main tags: ghcr.io/<name>/<image-name>:latest cache-from: type=registry,ref=ghcr.io/<name>/<image-name>:latest cache-to: type=inline build-args: | --tlsverify=false
验证
修改配置后重新触发Action,检查镜像推送步骤是否成功。
内容的提问来源于stack exchange,提问作者Kevin Z.
相关产品推荐
相关产品推荐

