从 docker 中的 docker 登录私人 docker 注册表时出现服务器错误

Server Error when logging in to a private docker registry from docker in docker

我正在使用 boot2docker 和 docker 1.4.1,我是 运行 一个 Jenkins 容器,它也作为主机运行 Docker(也是版本1.4.1).但是,当我尝试使用以下方式登录我的 Tutum 私人 Docker 注册表时:

sudo docker login -u=username -p=**** -e=my@email.com tutum.co

我最终遇到以下错误:

Server Error: Post https://tutum.co/v1/users/: dial tcp: lookup tutum.co on [192.168.1.1]:53

如果我从 Jenkins 容器外部登录,一切正常。这是什么原因,我该如何解决?

更新:

如果我在 Jenkins 容器 (sudo service docker stop) 中停止 Docker 服务并使用以下命令启动它:

sudo docker -d &

我得到了一些更详细的信息:

INFO[0003] POST /v1.16/auth
INFO[0003] +job auth()
Get https://tutum.co/v1/_ping: dial tcp: lookup tutum.co on [192.168.1.1]:53: no such host
INFO[0005] -job auth() = ERR (1)
ERRO[0005] Handler for POST /auth returned error: Get https://tutum.co/v1/_ping: dial tcp: lookup tutum.co on [192.168.1.1]:53: no such host
ERRO[0005] HTTP Error: statusCode=404 Get https://tutum.co/v1/_ping: dial tcp: lookup tutum.co on [192.168.1.1]:53: no such host
FATA[0001] Error response from daemon: Get https://tutum.co/v1/_ping: dial tcp: lookup tutum.co on [192.168.1.1]:53: no such host

我已按照 Javier 的暗示通过更改 DNS 服务器来设法解决此问题。 Docker 使用 /etc/resolv.conf 中指定的指向 192.168.1.1 的 DNS 服务器。我更改了这个 8.8.8.8 然后我就可以登录了。

更新:

今天我试图覆盖 Dockerfile 中的 /etc/resolv.conf 文件,但结果是 Docker 在容器启动时设置了 DNS。这意味着我从 Dockerfile 添加的文件 resolv.conf 文件被覆盖。解决方法是在容器启动的时候加上--dns 8.8.8.8。例如

docker run --dns 8.8.8.8 ubuntu:14.04 <some_command>