docker: ошибка при ответе от демона: получение https://registry-1.docker.io/v2/: net/http: запрос отменен во время ожидания подключения

Вопрос или проблема

Как я могу исправить эту проблему в Ubuntu 20.04?

[18:31:29] (dpcc) jalal@echo:~/research/code$ sudo docker pull docurdt/heal
[sudo] password for jalal: 
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)


$ uname -a
Linux echo 5.4.0-99-generic #112-Ubuntu SMP Thu Feb 3 13:50:55 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux


$ docker --version
Docker version 20.10.7, build 20.10.7-0ubuntu5~20.04.2

У меня нет этой проблемы с $ docker pull на CentOS 7.

Вот прокси, которые я использовал в ~/.bashrc:

export http_proxy="http://webproxy.bu.edu:8900"
export https_proxy="http://webproxy.bu.edu:8900"
export ftp_proxy="http://webproxy.bu.edu:8900"
export rsync_proxy=$http_proxy
export no_proxy="localhost,127.0.0.1,.bu.edu,.ad.bu.edu,128.197.,10."

Добавил их в config.json, но ошибка осталась после выхода:

$ cat ~/.docker/config.json 
{
 "proxies":
 {
   "default":
   {
     "httpProxy": "http://webproxy.bu.edu:8900",
     "httpsProxy": "http://webproxy.bu.edu:8900",
     "noProxy": "localhost,127.0.0.1,.bu.edu,.ad.bu.edu,128.197.,10."
   }
 }
}

Я получаю:

[19:38:02] jalal@echo:~/research/code$ docker pull docurdt/heal
Using default tag: latest
Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

Вот мой /etc/systemd/system/docker.service.d/http-proxy.conf после установки Docker:

[Service]
Environment="HTTP_PROXY=http://my.proxy.address:8080/"

Я добавил переменную HTTPS_PROXY, что решило проблему с соединением:

[Service]
Environment="HTTP_PROXY=http://my.proxy.address:8080/"
Environment="HTTPS_PROXY=http://my.proxy.address:8080/"

Таким образом, в вашем случае это может быть:

[Service]
Environment="HTTP_PROXY=http://webproxy.bu.edu:8900/"
Environment="HTTPS_PROXY=http://webproxy.bu.edu:8900/"

$ sudo mkdir -p /etc/systemd/system/docker.service.d

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

$ sudo systemctl daemon-reload

$ sudo  systemctl restart docker


$ docker pull docurdt/heal
Using default tag: latest
latest: Pulling from docurdt/heal
e79bb959ec00: Pull complete 
7dc808d5d247: Pull complete 
04e0dd83f1c1: Pull complete 
7680ea831bfd: Pull complete 
f861c2ba948a: Pull complete 
27ae46f94ae6: Pull complete 
92a8fc1df4e5: Pull complete 
d6ff073d4a06: Pull complete 
626ee3046583: Pull complete 
Digest: sha256:31f30cf69b3271fffcba4c439ee19c92587969cd74ec649ec72dec84ce177b86
Status: Downloaded newer image for docurdt/heal:latest
docker.io/docurdt/heal:latest

Вот что у меня в http-proxy.conf:

$ cat /etc/systemd/system/docker.service.d/http-proxy.conf
[Service]
Environment="HTTP_PROXY=http://webproxy.bu.edu:8900"
Environment="HTTPS_PROXY="http://webproxy.bu.edu:8900"

Огромное спасибо twainwek из IRC за его время и за эту ссылку https://github.com/docker/for-win/issues/1534#issuecomment-405903684

К сожалению, установка прокси не сработала для меня. Поэтому я изменил свои DNS-записи, и это сработало, так как docker hub не отвечал на запросы от “8.8.8.8”.

  1. sudo vim /etc/docker/daemon.json (или используйте ~/.docker)
  2. Введите ваш желаемый DNS-запись:

   {
       "dns": ["YOUR.DNS.IP.HERE"]
   }

  1. sudo systemctl daemon-reload (можно пропустить)
  2. sudo systemctl restart docker

И это сработало! Я смог войти в Docker hub и загружать образы.

Шаги:

  1. Удалите пакет resolvconf и управляйте /etc/resolv.conf вручную
    sudo apt purge resolvconf
  2. Удалите /etc/resolv.conf sudo rm /etc/resolv.conf
  3. Создайте файл, если он не существует
    touch /etc/resolv.conf
  4. Отредактируйте файл: nano /etc/resolv.conf и добавьте следующее:
    nameserver 8.8.4.4
    nameserver 8.8.8.8
  5. Вот и все. Теперь вы можете тянуть ваш docker.

У меня была такая же ошибка. Я использую систему ubuntu 20.04

Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

Я добавил недостающие строки в /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4
sudo nano /etc/resolv.conf

Вот как это выглядит сейчас.

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 127.0.0.53
options edns0 trust-ad

Прежде чем погрузиться в кроличью нору, я сделал это:

sudo systemctl restart docker

И я смог продолжить установку успешно. Docker перезапускается очень быстро, так что если это сработает, вы сэкономите время. Если это продолжится, думаю, тогда будет время углубиться в причины.

Мой девиз – “Сначала делай меньше”

Благодарность @AMK, который сделал этот шаг последним в своем решении.

.

Ответ или решение

Теория

При использовании Docker на Ubuntu 20.04 может возникнуть ошибка с сообщением: "Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection". Эта ошибка часто связана с сетевыми проблемами, такими как неправильно настроенные прокси-серверы или DNS. Docker требует стабильного интернет-соединения для доступа к Docker Hub, а любые препятствия в сети могут привести к сбою операций, таких как docker pull.

Пример

Как видно из описания проблемы, пользователь уже пробовал несколько подходов для решения проблемы, в том числе конфигурирование прокси как в файле config.json Docker, так и в системных настройках посредством /etc/systemd/system/docker.service.d/http-proxy.conf. Несмотря на эти усилия, ошибка все равно сохраняется. Что примечательно, та же команда работает без проблем на другой операционной системе (CentOS 7), что указывает на специфические сетевые настройки Ubuntu как потенциальную причину проблемы.

Применение

  1. Настройка прокси-сервера

    • Проверьте правильность настроек прокси-сервера. Убедитесь, что в файле ~/.bashrc и в конфигурации Docker указаны актуальные и корректные данные.
    • Проверьте значения в /etc/systemd/system/docker.service.d/http-proxy.conf и убедитесь, что они соответствуют текущим настройкам вашего сетевого окружения.
[Service]
Environment="HTTP_PROXY=http://webproxy.bu.edu:8900/"
Environment="HTTPS_PROXY=http://webproxy.bu.edu:8900/"

После внесения изменений выполните:

   sudo systemctl daemon-reload
   sudo systemctl restart docker
  1. Настройка DNS

    Если проблема не решена, возможно, необходимо настроить DNS:

    • Откройте файл Docker daemon.json:
    sudo vim /etc/docker/daemon.json
    • Добавьте или измените записи DNS:
    {
       "dns": ["8.8.8.8", "8.8.4.4"]
    }
    • Перезапустите сервис Docker:
    sudo systemctl restart docker
  2. Обновление /etc/resolv.conf

    Также целесообразно вручную проверить и обновить настройки DNS в /etc/resolv.conf. При использовании автоматического управления DNS, например, через пакет resolvconf, конфигурация может быть перезаписана. Попробуйте удалить пакет resolvconf для ручного управления:

    sudo apt purge resolvconf

    Затем вручную обновите /etc/resolv.conf:

    sudo rm /etc/resolv.conf
    touch /etc/resolv.conf

    Добавьте в файл следующие строки:

    nameserver 8.8.8.8
    nameserver 8.8.4.4

    Теперь проблема должна быть решена, и команда docker pull должна работать как ожидалось.

  3. Диагностика сетевых проблем

    Если проблема повторяется, возможно, следует глубже исследовать сетевые настройки Ubuntu. Проверьте брандмауэр, настройки NAT, и наличие любых ограничений со стороны провайдера.

Это руководство включает основные диагностические шаги и исправления для решения проблемы с Docker на Ubuntu. При следовании этим рекомендациям важно учитывать специфические особенности вашего сетевого окружения. Если проблема не решается, рекомендуется обратиться за помощью к сети или специалистам по системному администрированию.

Оцените материал
Добавить комментарий

Капча загружается...