7

我已经在 Windows 8.1 中安装了 Docker Toolbox,并且一直在按照安装教程进行操作。当进入创建和推送自己的图像的步骤时,我在尝试运行时收到此错误docker login ...

### VIA Docker Quickstart Terminal
### docker login --username=myuser --password="mypass" --email=myemail@gmail.com
time="2015-11-17T03:20:58.160803558Z" level=debug msg="Calling POST /v1.21/auth" 
time="2015-11-17T03:20:58.160838971Z" level=info msg="POST /v1.21/auth" 
time="2015-11-17T03:20:58.169033324Z" level=debug msg="hostDir: /etc/docker/certs.d/https:/registry-win-tp3.docker.io/v1" 
time="2015-11-17T03:20:58.169071565Z" level=debug msg="pinging registry endpoint https://registry-win-tp3.docker.io/v1/" 
time="2015-11-17T03:20:58.169084660Z" level=debug msg="attempting v1 ping for registry endpoint https://registry-win-tp3.docker.io/v1/" 
time="2015-11-17T03:20:58.898542338Z" level=debug msg="Error unmarshalling the _ping PingResult: invalid character '<' looking for beginning of value" 
time="2015-11-17T03:20:58.898803841Z" level=debug msg="PingResult.Version: \"\"" 
time="2015-11-17T03:20:58.898818084Z" level=debug msg="Registry standalone header: ''" 
time="2015-11-17T03:20:58.898836197Z" level=debug msg="PingResult.Standalone: true" 
time="2015-11-17T03:20:58.898853685Z" level=debug msg="attempting v1 login to registry endpoint https://registry-win-tp3.docker.io/v1/" 
time="2015-11-17T03:20:59.478756938Z" level=error msg="Handler for POST /v1.21/auth returned error: Unexpected status code [403] : <html><body><h1>403 Forbidden</h1>\nRequest forbidden by administrative rules.\n</body></html>\n\n" 
time="2015-11-17T03:20:59.478815334Z" level=error msg="HTTP Error" err="Unexpected status code [403] : <html><body><h1>403 Forbidden</h1>\nRequest forbidden by administrative rules.\n</body></html>\n\n" statusCode=500 

为了解决这个问题,我尝试docker login ...在 Docker 默认虚拟机中运行。它在那里工作!

### VIA default virtual machine (192.168.99.100)
### docker login --username=myuser --password="mypass" --email=myemail@gmail.com https://index.docker.io/v1/
time="2015-11-17T03:20:46.053333255Z" level=debug msg="Calling POST /v1.21/auth" 
time="2015-11-17T03:20:46.053404176Z" level=info msg="POST /v1.21/auth" 
time="2015-11-17T03:20:46.082796012Z" level=debug msg="hostDir: /etc/docker/certs.d/https:/index.docker.io/v1" 
time="2015-11-17T03:20:46.082930763Z" level=debug msg="pinging registry endpoint https://index.docker.io/v1/" 
time="2015-11-17T03:20:46.082946790Z" level=debug msg="attempting v1 ping for registry endpoint https://index.docker.io/v1/" 
time="2015-11-17T03:20:46.082959103Z" level=debug msg="attempting v1 login to registry endpoint https://index.docker.io/v1/" 

我注意到他们使用了两个不同的 URL,并且第一个遇到了解析错误。凭据显然是正确的,因为它们在 VM 内工作,除非两个域不共享用户。MINGW64 是否破坏了 URL 或响应?

4

1 回答 1

8

2016 年 2 月更新

PR 19891“启用跨平台登录到注册表”应该解决了这个问题

使用守护进程定义的注册表 URL 进行 docker 登录。

这允许与 Linux 守护程序交互的 Windows 客户端正确使用默认的注册表端点,而不是 Windows 特定的端点。

它在提交 19eaa71中(可能适用于 docker 1.10?)


这在docker/docker 问题 15612和docker /docker 问题 18019中都有报告

在对源代码进行一些分析后,我发现我们有不同的 Windows 和 UNIX 注册表 URL。

Windows url 来自最近的 PR 15417,其中包含以下评论:

// Currently it is a TEMPORARY link that allows Microsoft to continue
// development of Docker Engine for Windows.

所以这个 url 可能不起作用(除非您使用的是最新的 Windows Server 2016)


docker/hub-feedback问题 473中似乎有一种解决方法,其中涉及:

  • 指定 docker io 的默认索引注册表,

    docker login --username=myuser --password=mypassword --email=myemail https://index.docker.io/v1/
    WARNING: login credentials saved in C:\Users\myuser\.docker\config.json
    Login Succeeded
    
  • 修改config.json上一步创建的文件,以便为以下内容添加相同的index.docker.io凭据registry-win

config.json

{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "myhash",
            "email": "myemail"
        },
        "https://registry-win-tp3.docker.io/v1/": {
            "auth": "myhash",
            "email": "mydomain"         
        }
    }
}

之后, adocker push index.docker.io/myuser/myrepo:latest确实有效。

于 2015-11-17T05:38:46.773 回答