Github Actions中Docker登录步骤授权失败求助
问题
Github Actions构建任务的Docker登录步骤失败,报错如下:
Error: Error response from daemon: Get "https://registry-1.docker.io/v2/": unauthorized: incorrect username or password
我的配置和Docker官方示例几乎一致,反复核对过凭据,构建器能正常读取存储为secrets的凭据(显示为***),用同样的凭据在终端可以正常登录Docker Hub,但在Github Actions中就是无法成功。相关配置代码如下:
name: ci on: push: branches: [ "main" ] # Publish semver tags as releases. tags: [ 'v*.*.*' ] env: USERNAME: ${{ secrets.DOCKER_HUB_USERNAME }} PASSWORD: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} jobs: build: environment: prod runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - name: Login to Docker Hub uses: docker/login-action@v2 with: username: $USERNAME password: $PASSWORD ...Rest of the yml
解决建议
- 直接引用secrets变量:把登录步骤里的
username: $USERNAME改成username: ${{ secrets.DOCKER_HUB_USERNAME }},password: $PASSWORD改成password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }},跳过env中转。有时候环境变量的解析顺序可能出问题,直接用secrets更稳妥。 - 检查环境级secrets配置:你的job指定了
environment: prod,要确认prod环境下已经配置了DOCKER_HUB_USERNAME和DOCKER_HUB_ACCESS_TOKEN这两个secrets。仓库级secrets和环境级secrets是分开的,指定环境后会优先读取环境级的,要是环境里没配置就会登录失败。 - 验证访问令牌权限:确保Docker Hub生成的访问令牌有读写仓库的权限,别只给只读权限。同时确认令牌没过期、没被撤销。
- 核对用户名大小写:Docker Hub用户名区分大小写,检查secrets里的用户名和Docker Hub账号完全一致,包括大小写。
- 清理缓存试试:有时候缓存的Docker客户端状态会干扰登录,可以在登录步骤前添加清理缓存的操作,或者暂时禁用工作流里的缓存配置。
内容的提问来源于stack exchange,提问作者barkin
相关产品推荐
相关产品推荐

