为什么在Docker Quickstart终端中运行"docker login"失败,但在默认的虚拟机内却成功?

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默认虚拟机内运行docker login ...,这样就可以正常工作了!
### 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,而第一个遇到了解析错误。除非这两个域不共享用户,否则凭据显然是正确的,因为它们可以在虚拟机内部工作。MINGW64是否破坏了URL或响应?


似乎有一个解决方法:请查看我的编辑后的答案。 - VonC
我已更新答案:似乎有一个官方修复程序。 - VonC
1个回答

8

2016年2月更新:

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

使用守护进程定义的Registry URL进行docker登录。

这允许Windows客户端与Linux守护进程交互时正常使用默认的Registry终点,而不是特定于Windows的终点。

这在提交19eaa71中(也许适用于docker 1.10?)


这在docker/docker issue 15612docker/docker issue 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.

所以,如果您不是在最近的Windows Server 2016上,则可能无法使用此URL。


docker/hub-feedback问题473中似乎有一种解决方法,它涉及以下内容:

  • specifying the default index registry of 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
    
  • modifying the config.json file created by the previous step, in order to add the same credentials for index.docker.io for the 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"         
        }
    }
}

之后,docker push index.docker.io/myuser/myrepo:latest 就可以正常工作。

非常感谢您提供的详细答案和解决方法!对我非常有帮助! - Nejuf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接