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 }}
关键说明
- services的认证逻辑:GitHub Actions的services支持通过
credentials参数指定私有镜像仓库的认证信息,拉取镜像时会自动用这些信息登录仓库。 - 权限验证:你已经为仓库授予了包的访问权限,
GITHUB_TOKEN默认会继承仓库的权限,只要确保仓库的Workflow权限设置正确(在仓库Settings > Actions > General中,将Workflow permissions设为至少允许读取packages),这个token就能正常拉取镜像。 - 无需额外登录步骤:steps里的
docker/login-action是给后续steps中的docker命令用的,对services的镜像拉取没有帮助,可以保留或根据需要删除。
内容的提问来源于stack exchange,提问作者sanderdev
相关产品推荐
相关产品推荐

