Docker:无法提取已推送到私有注册表的图像

时间:2017-01-24 20:31:22

标签: docker docker-compose

我这样做:

docker pull my-private-repo.xyz.com:443/platform/abc

我收到以下错误:

Pulling repository my-private-repo.xyz.com:443/platform/abc
Error: Status 400 trying to pull repository platform/abc: "{\n  \"errors\" : [ {\n    \"status\" : 400,\n    \"message\" : \"Unsupported docker v1 repository request for 'my-private-repo'\"\n  } ]\n}"

我的docker守护程序配置如下:

{
  "insecure-registries" : [
    "my-private-repo.xyz.com:443"
  ],
  "experimental" : false
}

这是我的码头信息:

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 15
Server Version: 1.13.0
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 22
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 03e5862ec0d8d3b3f750e19fca3ee367e13c090e
runc version: 2f7393a47307a16f8cee44a37b262e8b81021e3e
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
Kernel Version: 4.9.4-moby
Operating System: Alpine Linux v3.5
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.952 GiB
Name: moby
ID: WW55:6DVS:DJCJ:3NXI:2CDX:44JW:F6IK:P2JU:LM7X:B76Y:HC3G:RCEU
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 16
 Goroutines: 27
 System Time: 2017-01-24T21:30:22.279581628Z
 EventsListeners: 1
No Proxy: *.local, 169.254/16
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 my-private-repo.xyz.com:443
 127.0.0.0/8
Live Restore Enabled: false

添加了上面的泊坞广告信息。有解决方案吗指出我可能做错了什么?

docker客户端版本是这样的:

13:39 $ docker --version
Docker version 1.13.0, build 49bf474

更新:

解决。当存储库中不存在图像时,看起来Docker会抛出含糊不清的错误消息。当我这样做时:

docker pull my-private-repo.xyz.com:443/platform/abc

我希望能够下载带有“最新”标签的图片。在存储库中,此标记不存在此类图像。但抛出的错误是错误的。

此外,我还根据对此的评论中的建议更改了我的守护程序配置:

{
  "experimental" : false,
  "disable-legacy-registry" : true,
  "insecure-registries" : [
    "my-private-repo.xyz.com:443"
  ]
}

现在我能够拉出图像了。

3 个答案:

答案 0 :(得分:3)

当您使用Docker客户端从注册表中提取图像时,客户端将首先尝试向注册表发送V2版本请求。如果此请求返回错误(即图像不存在或请求未经授权),则docker客户端将退回并尝试发送另一个V1版本请求。

由于您的注册表处于较新版本,并且它不再支持V1 API,因此注册表将在第二个V1请求尝试中抛出错误,例如“不支持的docker v1存储库请求”。

为避免这种情况,Docker开发人员计划默认将--disable-legacy-registry选项添加到Docker客户端。如果此选项已设置为true,则Docker客户端将不会尝试再次发送V1版本请求,但会从初始V2请求返回原始错误消息。

有关详情,请查看此问题:https://github.com/docker/docker/issues/26142#issuecomment-271867508

答案 1 :(得分:0)

如果你这意味着你使用Docker少于1.9版本。 Docker已弃用此版本的v1注册表。请检查以下内容

  1. 检查泊坞窗版本docker --versiondocker info
  2. 检查在docker中注册的注册表,如果在Docker中配置了多个注册表,则需要检查哪个注册表配置了v1注册表。
  3.   

    docker run --rm --pid = host alpine ps aux | grep dockerd

    上面的命令将显示系统中配置了多少Docker注册表。如果有多个,请逐个删除和配置进行检查。

    因此,如果它有多个注册表设置,请检查每个注册表并检查配置是否支持v2。

    如果您只配置了一个注册表并面临此问题,我建议将Docker的版本升级到大于1.9。

答案 2 :(得分:0)

添加到所选的答案和使用的解决方法中:

使用JSON文件配置Docker守护程序,在Linux系统上的/etc/docker/daemon.json或Windows下的C:\ ProgramData \ docker \ config \ daemon.json中创建文件。在MacOS上,通过任务栏>“偏好设置”>“守护程序”>“高级”进入鲸鱼。

相关问题