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

使用Docker Compose拉取私有镜像遇unauthorized权限错误求助

Docker Compose拉取私有镜像失败,docker pull却正常的问题处理

问题详情

已通过docker login成功登录私有镜像仓库,单独执行docker pull myregistry.io/repo/app-rest-api-endpoint可以正常拉取目标镜像,但运行docker compose up时触发未授权错误:

"Error response from daemon: unauthorized: unauthorized to access repository: myrepo/myservice, action: pull: unauthorized to access repository: myrepo/myservice, action: pull"

启用--verbose参数执行docker compose up,无法获取有效调试信息定位问题根源。

使用环境为Docker for Windows,版本信息如下:

PS C:\Users\kov\source\repos\localsetup> docker version
Client:
 Cloud integration: v1.0.29
 Version:           20.10.21
 API version:       1.41
 Go version:        go1.18.7
 Git commit:        baeda1f
 Built:             Tue Oct 25 18:08:16 2022
 OS/Arch:           windows/amd64
 Context:           default
 Experimental:      true

Server: Docker Desktop 4.15.0 (93002)
 Engine:
  Version:          20.10.21
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.18.7
  Git commit:       3056208
  Built:            Tue Oct 25 18:00:19 2022
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.10
  GitCommit:        770bd0108c32f3fb5c73ae1264f7e503fe7b2661
 runc:
  Version:          1.1.4
  GitCommit:        v1.1.4-0-g5fd4c4d
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

使用的Docker Compose文件内容:

services:
  appRestApiEndpoint:
    image: myregistry.io/repo/app-rest-api-endpoint
    container_name: my-service
    ports:
      - 5000:80
    networks:
      - backend
    environment:
      - ASPNETCORE_ENVIRONMENT=myEnvVariable
  
networks:
  backend:

解决方法

1. 确认Docker上下文一致性

Docker for Windows支持Windows容器和WSL2容器两种上下文,确保执行docker login和docker compose up使用的是同一个上下文:

  • 执行docker context ls查看当前活跃上下文
  • 若上下文不匹配,切换到正确的上下文,例如:docker context use default

2. 在Compose文件中添加强制拉取配置

在服务节点中添加pull_policy: always,强制Compose每次启动时拉取镜像,避免使用本地缓存的无权限状态:

services:
  appRestApiEndpoint:
    image: myregistry.io/repo/app-rest-api-endpoint
    container_name: my-service
    pull_policy: always
    ports:
      - 5000:80
    networks:
      - backend
    environment:
      - ASPNETCORE_ENVIRONMENT=myEnvVariable

3. 重新验证仓库认证信息

  • 先执行docker logout myregistry.io退出当前登录,再重新执行docker login myregistry.io输入账号密码完成登录
  • 检查Windows下的认证配置文件C:\Users\<你的用户名>\.docker\config.json,确认其中包含私有仓库的有效认证条目,格式示例:
{
  "auths": {
    "myregistry.io": {
      "auth": "<base64编码的用户名密码字符串>"
    }
  }
}

4. 清除本地镜像缓存并重新拉取

删除本地已存在的目标镜像,强制Compose重新拉取:

  • 执行docker rmi myregistry.io/repo/app-rest-api-endpoint
  • 再执行docker compose up --pull always启动服务

5. 更新Docker Desktop版本

当前使用的Docker Desktop版本(4.15.0)可能存在Compose兼容性问题,更新到最新稳定版:

  • 打开Docker Desktop,进入设置页面的「Software Updates」检查并安装更新

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:50:22