Gitea Docker Runner拉取镜像时认证失败求助
Gitea Runner执行任务时Docker认证失败问题排查
我有一台正在运行的Gitea服务器,想要测试Actions功能,于是在本地用Docker容器启动了一个Gitea Runner。Runner能被Gitea服务器识别,提交代码时也能接收任务,但执行任务时一直出现Docker认证失败的错误。我已经在命令行执行了docker login,但问题还是没解决,请问哪里操作错了?
相关配置文件
docker-compose.yml
services: runner: image: gitea/act_runner:latest environment: CONFIG_FILE: /config.yaml GITEA_INSTANCE_URL: "${INSTANCE_URL}" GITEA_RUNNER_REGISTRATION_TOKEN: "${REGISTRATION_TOKEN}" GITEA_RUNNER_NAME: "${RUNNER_NAME}" GITEA_RUNNER_LABELS: "${RUNNER_LABELS}" volumes: - ./config.yaml:/config.yaml - ./data:/data - /var/run/docker.sock:/var/run/docker.sock
build.yml
run-name: Test run on: push: branches: - main pull_request: branches: - main - 'feature/**' jobs: print-message: runs-on: ubuntu-22.04 steps: - name: Print message run: echo "Hello, world!"
错误输出日志
MacBook-MK-Docker-2(version:v0.2.11) received task 369 of job 388, be triggered by event: push workflow prepared evaluating expression 'success()' expression 'success()' evaluated to 'true' 🚀 Start image=gitea/runner-images:ubuntu-22.04 🐳 docker pull image=gitea/runner-images:ubuntu-22.04 platform= username=*** forcePull=true 🐳 docker pull gitea/runner-images:ubuntu-22.04 pulling image 'docker.io/gitea/runner-images:ubuntu-22.04' () using authentication for docker pull Error response from daemon: failed to resolve reference "docker.io/gitea/runner-images:ubuntu-22.04": failed to authorize: failed to fetch oauth token: unexpected status from GET request to https://auth.docker.io/token?scope=repository%3Agitea%2Frunner-images%3Apull&service=registry.docker.io: 401 Unauthorized
问题原因与解决方法
核心原因
你在宿主机执行docker login生成的认证信息存在宿主机的~/.docker/config.json里,但Gitea Runner容器默认无法访问这个文件,导致拉取镜像时使用的认证信息无效。另外,gitea/runner-images是公开镜像,理论上无需认证就能拉取,也可能是容器内Docker配置异常或网络环境(如代理)干扰了认证流程。
具体解决步骤
挂载宿主机Docker认证文件到容器
修改docker-compose.yml的volumes部分,添加宿主机Docker配置目录的映射:volumes: - ./config.yaml:/config.yaml - ./data:/data - /var/run/docker.sock:/var/run/docker.sock - ~/.docker:/root/.docker # 新增该行,让容器复用宿主机的认证信息测试容器内直接拉取镜像
进入Runner容器手动测试拉取,排查是否是网络或镜像本身的问题:# 进入容器(替换为你的Runner容器名称) docker exec -it runner bash # 尝试拉取目标镜像 docker pull gitea/runner-images:ubuntu-22.04如果失败,检查网络是否能正常访问Docker Hub,或是否有代理拦截了认证请求。
检查Runner配置文件的镜像拉取设置
打开config.yaml,确认是否存在强制启用认证的配置(如force_auth: true),如果有,改为false——因为公开镜像不需要认证。
内容的提问来源于stack exchange,提问作者matthiaskurte
相关产品推荐
相关产品推荐

