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

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配置异常或网络环境(如代理)干扰了认证流程。

具体解决步骤

  1. 挂载宿主机Docker认证文件到容器
    修改docker-compose.yml的volumes部分,添加宿主机Docker配置目录的映射:

    volumes:
      - ./config.yaml:/config.yaml
      - ./data:/data
      - /var/run/docker.sock:/var/run/docker.sock
      - ~/.docker:/root/.docker  # 新增该行,让容器复用宿主机的认证信息
    
  2. 测试容器内直接拉取镜像
    进入Runner容器手动测试拉取,排查是否是网络或镜像本身的问题:

    # 进入容器(替换为你的Runner容器名称)
    docker exec -it runner bash
    # 尝试拉取目标镜像
    docker pull gitea/runner-images:ubuntu-22.04
    

    如果失败,检查网络是否能正常访问Docker Hub,或是否有代理拦截了认证请求。

  3. 检查Runner配置文件的镜像拉取设置
    打开config.yaml,确认是否存在强制启用认证的配置(如force_auth: true),如果有,改为false——因为公开镜像不需要认证。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 07:38:09