【问题标题】:Error "Get https://registry-1.docker.io/v2/: net/http: request canceled" while building image构建映像时出现错误“获取 https://registry-1.docker.io/v2/: net/http: 请求已取消”
【发布时间】:2018-06-11 21:17:49
【问题描述】:

我在构建图像时遇到以下错误

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)

【问题讨论】:

    标签: docker docker-image


    【解决方案1】:

    在 Win10 上尝试使用 Docker 构建或拉取映像时,我遇到了同样的问题。将 Docker vEthernet(DockerNAT) 网络适配器的 DNS 更改为 8.8.8.8 为我修复了此问题,如 GitHub issue 中所述。

    要更改 DNS,请转到 Docker (TrayIcon) -> 设置 -> 资源 -> 网络并设置一个固定的 DNS 服务器 ip = 8.8.8.8

    在 windows 网络适配器的配置中更改 DNS 服务器也可以。

    重启后 Docker 能够再次拉取和构建镜像。

    版本信息:

    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
    

    【讨论】:

    • 谢谢!!顺便说一下,我使用了 clouflare 的 dns ( 1.1.1.1 ),它有点快..
    【解决方案2】:

    我认为问题在于您在代理后面,在这种情况下您需要在 Docker systemd 服务文件中编写手动配置。这将覆盖默认的docker.service 文件。

    如果您使用 Docker for Windows,那么只需在“vEthernet (DockerNAT)”网络适配器上将默认 DNS 设置为 8.8.8.8。但是,请记住,这不是最佳做法,因为您将暴露在办公室网络中。

    在 linux 环境中,您可以添加环境变量,因为您在 HTTP_PROXY 或 HTTPS_PROXY 后面,因为您分别使用端口 80 或 443。如下图/etc/systemd/system/docker.service.d/http-proxy.conf

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

    关于/etc/systemd/system/docker.service.d/https-proxy.conf中的HTTP_PROXY

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

    然后在deamon reload后重启docker,

     $ sudo systemctl daemon-reload
     $ sudo systemctl restart docker
    

    希望这行得通。

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

    【讨论】:

    • 不,我没有任何代理。
    • (你能用你的环境修改这个问题吗)冷静然后试试这个.. sudo nano /etc/resolv.conf #add这些行在家庭路由器的顶部和上面... nameserver 8.8.8.8 nameserver 8.8.4.4 然后重启docker。
    • 我还在Dockerfile 中添加定义代理的行,如下所示:ENV http_proxy=http...ENV https_proxy=...ENV= ftp_proxy=...
    • 如果您在 windows 上并且使用代理,更改代理设置会更容易:右键单击 windows 工具栏中的 Docker 图标 --> 设置 --> 资源 --> 代理
    • 我的环境中有一个 http 代理,此配置有效,谢谢。
    【解决方案3】:

    在 Mac OS X 上,我通过不使用实验性虚拟化框架解决了这个问题。

    Preferences -> Experimental Features

    【讨论】:

    • 确认这已为我修复。 Big Sur 11.3.1 和英特尔与 Docker 引擎 20.10.6
    • Big Sur 11.3.1, m1, Docker 20.10.6 现在可以正常工作了
    • 那么,我们如何让它与 Big Sur 实验性 VF 一起工作,或者这只是一些还不能工作的东西?
    • 就是这样,谢谢!它在我的机器上的某个时候工作,但听起来 macOS 11.3.1 破坏了一些东西。将不得不在 11.4 上尝试。
    【解决方案4】:

    我遇到了同样的问题,以下修复对我有用: https://github.com/moby/moby/issues/22635#issuecomment-260063252

    就我而言,我已将以下 2 行 nameserver 添加到 /etc/resolv.conf 文件中。

    之前:

    nameserver 127.0.0.53
    

    之后:

    nameserver 8.8.8.8
    nameserver 8.8.4.4
    nameserver 127.0.0.53
    

    【讨论】:

      【解决方案5】:

      我在执行 Ansible AWX 安装时遇到了这个问题。

      我有自己的私有 DNS:192.168.0.254 和 192.168.0.253,但收到了同样的错误。

      将我的 DNS 改回 8.8.8.8 和 8.8.4.4 后问题得到解决。

      【讨论】:

      • 我使用的是 1.1.1.1,但是是的,这为我修复了它
      【解决方案6】:

      我遇到了同样的问题,但在 30 分钟后才发现我在 VPN 网络上工作,这会阻止其他网站。我关闭了 VPN,它工作了 :) 这绝对是一个网络问题。当它说“未通过身份验证”时,我想也许我需要一些登录凭据。

      【讨论】:

      • 哈哈,这个方法很简单,没关系
      【解决方案7】:

      当您在“实验功能”选项卡下选中“使用新的虚拟化框架”复选框时,在 Big Sur 11.3.1,英特尔上会出现此错误。取消选中该框并重新启动 Docker 为我解决了这个问题。

      【讨论】:

      • 我遇到了同样的问题。不过,恢复出厂设置似乎已经解决了。
      【解决方案8】:

      我遇到了同样的错误,它被解决了

      docker logout registry-1.docker.io
      

      【讨论】:

      • 我在 VPN 连接时安装了 docker,发现问题与 vpn 设置有关,但仅执行这一行命令即可解决问题!
      【解决方案9】:

      我对在 swarm 中部署的注册表有同样的问题。重新启动 docker 会有所帮助,但一段时间后会再次出现。

      使用 docker-compose 重新部署注册表

      sudo docker-compose up -d
      

      一切正常

      【讨论】:

        【解决方案10】:

        这可能是旧的,但在此处已修复

        https://success.docker.com/article/i-get-x509-certificate-signed-by-unknown-authority-error-when-i-try-to-login-to-my-dtr-with-default-certificates

        在每台服务器上运行以下命令

        export DOMAIN_NAME=bootstrap.node1.local
        export TCP_PORT=5000
        openssl s_client -connect $DOMAIN_NAME:$TCP_PORT -showcerts </dev/null 2>/dev/null | openssl x509 -outform PEM | tee /etc/pki/ca-trust/source/anchors/$DOMAIN_NAME.crt
        update-ca-trust
        /bin/systemctl restart docker.service
        

        【讨论】:

          【解决方案11】:

          我也遇到了拉取请求超时的问题。 两者都有

          docker pull hello-world
          kubeadm config images pull
          

          也许这个问题是我在将虚拟机从 ubuntu 18 升级到 20 时开始的,但我也做了很多与 kubernetes 相关的配置更改,所以不确定。

          无论如何,这个解决方案为我解决了这个问题。

          https://stackoverflow.com/a/51648635/11416610

          谢谢@nils

          如果上面的链接刹车,这里是一个报价:

          我昨天遇到了同样的问题。由于我在公司代理背后,我 必须在以下位置为 docker 守护进程定义 http-proxy:

          /etc/systemd/system/docker.service.d/http-proxy.conf
          

          问题是,我错误配置了 https_proxy,它是怎么回事 描述here。我在 https_proxy 环境中使用了 https:// 变量,导致了这个错误。

          此配置适用于我:

          cat /etc/systemd/system/docker.service.d/http-proxy.conf
          
          [Service]
          Environment=http_proxy=http://IP:PORT/
          Environment=no_proxy=localhost,127.0.0.1
          Environment=https_proxy=http://IP:PORT/
          

          请记住,更改后必须重新启动 docker daemon 这个配置。您可以通过以下方式实现:

          systemctl daemon-reload
          systemctl restart docker
          

          【讨论】:

            【解决方案12】:

            就我而言,我的公司需要在白名单中定义我的 IP 才能访问 cloud.docker 文件。因此,如果您有此类错误,请立即告诉负责人。

            【讨论】:

              【解决方案13】:

              当我尝试构建 elasticsearch 时,我在 ubuntu 上遇到了这个问题:

              我得到了这个错误:

              ERROR: Get https://docker.elastic.co/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
              

              这是我的网络连接问题。我正在使用VPN。 所以我断开我的 VPN 连接,它工作正常。

              由于某些原因,它正在尝试查找域,在我断开 VPN 一切正常后,它似乎试图在本地网络中搜索域。

              【讨论】:

                【解决方案14】:

                我的问题是 Windows WSL,您不仅需要在 Docker 桌面客户端和容器中设置上述静态 dns 服务器,还需要添加

                 [network]
                 generateResolvConf = false
                

                到您的 linux 容器中的 /etc/wsl.conf。您需要按照https://superuser.com/questions/1126721/rebooting-ubuntu-on-windows-without-rebooting-windows 中的说明重新启动您的容器,或者您可以重新启动您的电脑。

                【讨论】:

                  【解决方案15】:

                  Windows 10 - 家用电脑。没有一个解决方案对我有用。有效的是卸载docker,重新启动PC,在安装exe时“以管理员身份运行”。成功了!!

                  【讨论】:

                    【解决方案16】:

                    这些解决方案都不适合我。 我终于通过更新 docker 让它工作了。 (MAC 操作系统)

                    【讨论】:

                      【解决方案17】:

                      我在尝试推送到 Docker 时遇到了这个问题。

                      1. 我更新了 Docker Desktop(通过 GUI)

                      2. 我还跑了docker system prune,提示:

                        警告!这将删除: - 所有停止的容器 - 至少一个容器未使用的所有卷 - 至少一个容器未使用的所有网络 - 所有悬空图像

                      输入yes确认这一点

                      【讨论】:

                        【解决方案18】:

                        这可能是暂时的网络问题。我有同样的问题。我会这两个

                        • 再次重新运行命令
                        • 重启 Docker 桌面

                        【讨论】:

                          【解决方案19】:

                          我有同样的问题。我在学习Udemy 课程时遇到了这个错误。由于我是 Docker 新手,我实际上是通过提供不正确的存储库名称来构建映像(我使用的是 Instructor 用户名而不是我的 docker 存储库用户名)。当我们将图像推送到 Docker 中心时,请使用您的 docker 存储库名称。因此使用您的用户名构建图像。

                          码头工人建造。 -t docker_username/example:latest

                          在哪里。表示 Dockerfile 所在的当前目录。 请先使用系统中的 Docker 桌面登录您的docker repository

                          希望这能解决某人的问题。

                          【讨论】:

                            【解决方案20】:

                            我有时会遇到这个错误,我的 docker 镜像之前构建得很顺利,但是当我必须删除所有镜像时(即使我没有对 docker 配置文件进行任何更改或代码中的任何错误)。这仍然会发生。

                            所以我认为它可能是由于连接导致它执行“Get https://registry-1.docker.io/v2/:.....”

                            我已将 DNS 更改为 google DNS 8.8.8.8 和 8.8.4.4,然后就可以了。 祝你好运!

                            【讨论】:

                              【解决方案21】:

                              我从自己的 Internet 连接中收到此错误。换了别的提供商,一切都好。

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2021-06-02
                                • 2022-12-01
                                • 1970-01-01
                                • 2019-01-03
                                • 1970-01-01
                                • 2020-07-20
                                相关资源
                                最近更新 更多