You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions服务拉取GHCR镜像失败:如何在services中用GITHUB_TOKEN?

在GitHub Actions的services中拉取GHCR私有镜像解决权限被拒问题

你遇到的Error response from daemon: denied是因为GHCR的私有镜像需要认证才能拉取,而steps里的docker/login-action不会作用于services部分的容器拉取——services是独立于steps的上下文启动的,必须单独配置认证信息。

解决方法:直接在services中添加认证配置

修改你的工作流配置,在mysql服务下增加credentials字段,使用GITHUB_TOKEN完成认证:

services:
  mysql:
    image: ghcr.io/my-name/my-image
    ports:
      - 3306:3306
    credentials:
      username: ${{ github.actor }}
      password: ${{ secrets.GITHUB_TOKEN }}

关键说明

  1. services的认证逻辑:GitHub Actions的services支持通过credentials参数指定私有镜像仓库的认证信息,拉取镜像时会自动用这些信息登录仓库。
  2. 权限验证:你已经为仓库授予了包的访问权限,GITHUB_TOKEN默认会继承仓库的权限,只要确保仓库的Workflow权限设置正确(在仓库Settings > Actions > General中,将Workflow permissions设为至少允许读取packages),这个token就能正常拉取镜像。
  3. 无需额外登录步骤:steps里的docker/login-action是给后续steps中的docker命令用的,对services的镜像拉取没有帮助,可以保留或根据需要删除。

内容的提问来源于stack exchange,提问作者sanderdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 19:15:33