我刚刚在他们的网页上安装了Docker-Toolbox

我从Docker快速入门终端开始,如下所示

                        ##         .
                  ## ## ##        ==
               ## ## ## ## ##    ===
           /"""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ /  ===- ~~~
           \______ o           __/
             \    \         __/
              \____\_______/


docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com

bash-3.2$ 

但当我尝试执行docker拉hello-world时,这是我看到的

bash-3.2$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository docker.io/library/hello-world
Network timed out while trying to connect to https://index.docker.io/v1/repositories/library/hello-world/images. You may want to check your internet connection or if you are behind a proxy.
bash-3.2$ 

怎么了?


当前回答

我今天在使用1.10.1时遇到了这个问题,现有的解决方案都不起作用。我试着重新启动,升级,重新生成证书…

我注意到我在机器上创建了很多网络。去除后用:

docker network ls | grep bridge | awk '{print $1}' | xargs -n1 docker network rm

DNS又开始工作了。

注意:您可以忽略有关预定义网络的错误

其他回答

我在Windows 10上安装的Docker没有工具箱,所以需要启用Hyper-V的版本。

对于Docker 1.12版本,我必须进入任务栏,右键单击Docker图标,选择设置->网络,并将DNS服务器设置为固定,即使用谷歌的DNS服务器8.8.8.8。

一旦这个设置被改变,它终于起作用了。

我今天早上遇到了同样的问题,下面的问题为我解决了:

$ docker-machine restart default      # Restart the environment
$ eval $(docker-machine env default)  # Refresh your environment settings

这似乎是由于Docker虚拟机进入了一个奇怪的状态。这里有一个开放的github问题

另一种情况:如果您的docker网络适配器是禁用的,它将失败与此错误。适配器被命名为“vEthernet (DockerNAT)”或类似的名称。显然,这个适配器以某种方式参与了正常的docker pull行为。让它回来解决问题。

我猜您有网络问题。你背后有代理人吗?它是否有可能过滤到docker的连接。IO或阻塞docker用户代理?

我安装了工具箱,运行了你的测试。它工作得很好,在这里:

docker is configured to use the default machine with IP 192.168.99.101
For help getting started, check out the docs at https://docs.docker.com

bash-3.2$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world

535020c3e8ad: Pull complete 
af340544ed62: Already exists 
library/hello-world:latest: The image you are pulling has been verified. Important: image verification is a tech preview feature and should not be relied on to provide security.
Digest: sha256:d5fbd996e6562438f7ea5389d7da867fe58e04d581810e230df4cc073271ea52
Status: Downloaded newer image for hello-world:latest

Hello from Docker.
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker Hub account:
 https://hub.docker.com

For more examples and ideas, visit:
 https://docs.docker.com/userguide/

bash-3.2$

我昨天遇到了这个完全相同的问题,没有一个“流行”的答案(比如将DNS修复到8.8.8.8)对我有效。我最终偶然发现了这个链接,这就成功了……https://github.com/docker/for-win/issues/16

在Docker for Windows, Windows 10和Hyper-V之间,在虚拟网络适配器创建过程中似乎有一个问题。具体来说,您可能最终会得到两个“vEthernet (DockerNAT)”网络适配器。使用Get-NetAdapter“vEthernet (DockerNAT)”检查(在一个升高的PowerShell控制台)。如果结果显示了多个适配器,您可以禁用并重命名它:

$vmNetAdapter = Get-VMNetworkAdapter -ManagementOS -SwitchName DockerNAT
Get-NetAdapter "vEthernet (DockerNAT)" | ? { $_.DeviceID -ne $vmNetAdapter.DeviceID } | Disable-NetAdapter -Confirm:$False -PassThru | Rename-NetAdapter -NewName "OLD"

然后打开Device Manager并删除禁用的适配器(出于某种原因,可以从这里执行,但不能从Network and Sharing Center适配器视图执行)。