Error "Get https://registry-1.docker.io/v2/: net/http: request canceled" while building image

I am getting the below error while building an image

Step 1/10 : FROM ubuntu:14.04
Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

I was facing the same issue when trying to build or pull an image with Docker on Win10. Changing the DNS of the Docker vEthernet(DockerNAT) network adapter to 8.8.8.8 fixed it for me, as described in this GitHub issue.

To change the DNS go to Docker (TrayIcon) -> Settings -> Resources -> Network and set a fixed DNS server ip = 8.8.8.8.

Changing the DNS server in the configuration of the windows network adapter worked too.

After restarting Docker is able to pull and build images again.

Version Info:

Windows 10 x64 Enterprise Version 1709

$ docker version
Client:
 Version:       17.12.0-ce
 API version:   1.35
 Go version:    go1.9.2
 Git commit:    c97c6d6
 Built: Wed Dec 27 20:05:22 2017
 OS/Arch:       windows/amd64

Server:
 Engine:
  Version:      17.12.0-ce
  API version:  1.35 (minimum version 1.12)
  Go version:   go1.9.2
  Git commit:   c97c6d6
  Built:        Wed Dec 27 20:12:29 2017
  OS/Arch:      linux/amd64
  Experimental: true

I think the issue is that you are behind the proxy which in which case you need to write make manual configuration in Docker systemd service file. That will overrides the default docker.service file.

If you are using Docker for Windows then simply set the default DNS to 8.8.8.8 on the "vEthernet (DockerNAT)" network adapter. But, remember this is not best practice as you will be exposing from your office network.

In linux environment, you could add the environment variable as you are behind HTTP_PROXY or HTTPS_PROXY, as you are using port 80 or 443 respectively. As shown below in /etc/systemd/system/docker.service.d/http-proxy.conf

[Service]
Environment="HTTP_PROXY=http://proxy.example.com:80/"

as for HTTTP_PROXY in /etc/systemd/system/docker.service.d/https-proxy.conf

[Service]
Environment="HTTPS_PROXY=https://proxy.example.com:443/"

Then just restart docker after deamon reload,

 $ sudo systemctl daemon-reload
 $ sudo systemctl restart docker

Hope this works.

Reference: https://docs.docker.com/engine/admin/systemd/#httphttps-proxy


On Mac OS X, I fixed this issue by not using the experimental virtualization framework.

Preferences -> Experimental Features