Ошибка при загрузке в docker (linux) “запрос отменен во время ожидания подключения (превышен тайм-аут клиента при ожидании заголовков)”

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

Тип проблемы

— ошибка

При попытке загрузить контейнеры Docker я столкнулся с этой ошибкой:

Используется тег по умолчанию: latest
Ошибка ответа от демона: Получить https://registry-1.docker.io/v2/: net/http: запрос отменен во время ожидания соединения (время ожидания клиента превышено при ожидании заголовков)

## Версия ОС
Ubuntu 18.04 (bionic)
## Версия Docker
Клиент:
Версия:           18.09.4
Версия API:       1.39
Версия Go:        go1.10.8
Git commit:        d14af54266
Собрано:             Ср Мар 27 18:35:44 2019
OS/Arch:           linux/amd64
Экспериментальный:      false
Сервер: Docker Engine - Community
Движок:
Версия:          18.09.4
Версия API:      1.39 (минимальная версия 1.12)
Версия Go:       go1.10.8
Git commit:       d14af54
Собрано:            Ср Мар 27 18:01:48 2019
OS/Arch:          linux/amd64
Экспериментальный:     false

Шаги для воспроизведения

docker pull hello-world

Я не использую прокси или VPN (что, похоже, является проблемой в других сообщениях, которые я видел по этой ошибке)

Я пытался найти решение, но безуспешно. service docker restart не решает проблему. Я обнаружил, что добавление “nameserver 8.8.8.8” в /etc/resolv.conf временно решает проблему, но resolv.conf автоматически перезаписывается/обновляется до старой версии, так что это не идеальное решение. Я ранее мог загружать образы Docker из Docker Hub на этом компьютере и в своей текущей сети, поэтому предположительно какие-то настройки были изменены, что и вызвало эту проблему. Буду очень признателен за любую помощь! Большое спасибо.

.

Если это важно, вот вывод команды docker info:

Контейнеры: 2
Запущенные: 0
Приостановленные: 0
Остановленные: 2
Образы: 9
Версия сервера: 18.09.4
Драйвер хранения: overlay2
Файловая система поддержки: extfs
Поддерживает d_type: true
Нативное различие Overlay: true
Драйвер логирования: json-file
Драйвер Cgroup: cgroupfs
Плагины:
Volume: local
Network: bridge host macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog
Swarm: неактивен
РUNTIME: runc
Стандартный RUNTIME: runc
Инициализационный бинарник: docker-init
Версия контейнера: bb71b10fd8f58240ca47fbb579b9d1028eea7c84
Версия runc: 2b18fe1d885ee5083ef9f0838fee39b62d653e30
Версия инициализации: fec3683
Параметры безопасности:
apparmor
seccomp
Профиль: по умолчанию
Версия ядра: 4.15.0-1035-oem
Операционная система: Ubuntu 18.04.2 LTS
OSType: linux
Архитектура: x86_64
ЦП: 12
Общая память: 31.05GiB
Имя: ###(удалено)###
ID: ###(удалено)###
Корневая папка Docker: /var/lib/docker
Режим отладки (клиент): false
Режим отладки (сервер): false
Регистры: https://index.docker.io/v1/
Метки:
Экспериментальный: false
Ненадежные реестры:
127.0.0.0/8
Живое восстановление включено: false
Лицензия продукта: Community Engine
ПРЕДУПРЕЖДЕНИЕ: Поддержка ограничения подкачки отсутствует

Вывод команды dig index.docker.io с использованием 127.0.0.53 (по умолчанию в resolv.conf)

 ; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> index.docker.io
 ;; глобальные опции: +cmd
 ;; Получен ответ:
 ;; ->>HEADER<<- opcode: QUERY, статус: NOERROR, id: 57173
 ;; флаги: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

 ;; OPT PSEUDOSECTION:
 ; EDNS: версия: 0, флаги:; udp: 65494
 ;; СЕКЦИЯ ВОПРОСА:
 ;index.docker.io.      IN  A

 ;; СЕКЦИЯ ОТВЕТА:
index.docker.io.    300 IN  CNAME   elb-io.us-east-1.aws.dckr.io.
elb-io.us-east-1.aws.dckr.io. 899 IN    CNAME   us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com.
us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 59 IN A 52.207.42.240
us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 59 IN A 3.91.211.1
us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 59 IN A 52.54.178.62

;; Время запроса: 404 мс
;; СЕРВЕР: 127.0.0.53#53(127.0.0.53)
;; КОГДА: Пн Апр 15 09:36:42 MDT 2019
;; РАЗМЕР MSG  получен: 212

Вывод команды dig index.docker.io с использованием 8.8.8.8

; <<>> DiG 9.11.3-1ubuntu1.5-Ubuntu <<>> index.docker.io
;; глобальные опции: +cmd
;; Получен ответ:
;; ->>HEADER<<- opcode: QUERY, статус: NOERROR, id: 37695
;; флаги: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: версия: 0, флаги:; udp: 512
;; СЕКЦИЯ ВОПРОСА:
;index.docker.io.       IN  A

;; СЕКЦИЯ ОТВЕТА:
index.docker.io.    133 IN  CNAME   elb-io.us-east-1.aws.dckr.io.
elb-io.us-east-1.aws.dckr.io. 837 IN    CNAME   us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com.
us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 56 IN A 52.207.42.240
us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 56 IN A 3.91.211.1
us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 56 IN A 52.54.178.62

;; Время запроса: 19 мс
;; СЕРВЕР: 8.8.8.8#53(8.8.8.8)
;; КОГДА: Пн Апр 15 09:49:22 MDT 2019
;; РАЗМЕР MSG  получен: 212

Вероятно, это не проблема с вашей установкой Docker.

Если изменение DNS на 8.8.8.8 решает проблему, возможно, вы получаете другой адрес от 8.8.8.8, чем от вашего обычного DNS-сервиса. Вы можете использовать dig, чтобы получить адрес, используя обе конфигурации:

dig index.docker.io

; <<>> DiG 9.10.3-P4-Ubuntu <<>> index.docker.io
;; глобальные опции: +cmd
;; Получен ответ:
;; ->>HEADER<<- opcode: QUERY, статус: NOERROR, id: 28068
;; флаги: qr rd ra; QUERY: 1, ANSWER: 5, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: версия: 0, флаги:; udp: 4096
;; СЕКЦИЯ ВОПРОСА:
;index.docker.io.               IN      A

;; СЕКЦИЯ ОТВЕТА:
index.docker.io.        926     IN      CNAME   elb-io.us-east-1.aws.dckr.io.
elb-io.us-east-1.aws.dckr.io. 926 IN    CNAME   us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com.
us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 926 IN A 52.54.178.62
us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 926 IN A 3.91.211.1
us-east-1-elbio-rm5bon1qaeo4-623296237.us-east-1.elb.amazonaws.com. 926 IN A 52.207.42.240

;; Время запроса: 2 мс
;; СЕРВЕР: 127.0.1.1#53(127.0.1.1)
;; КОГДА: Вс Апр 14 09:15:20 CEST 2019
;; РАЗМЕР MSG  получен: 214

Если вы не хотите менять DNS, вы все равно можете добавить один из указанных выше адресов в свой /etc/hosts, это не будет сброшено при перезагрузке. Конечно, это помешает вам использовать другие сервера в кластере, и конкретный адрес, который вы выберете, может стать недействительным.

Если ваш стандартный DNS в resolv.conf — 127.0.0.something, то ваша система, вероятно, настроена на использование управляемого NetworkManager dnsmasq: DNS-запросы обрабатываются службой на вашей системе, которая пересылает их на различные DNS “под капотом”. Вы можете выяснить фактический используемый DNS (DNS настраивается для каждого сетевого интерфейса), используя:

nmcli dev show | grep DNS

А затем продолжить поиск медленного/недействительного DNS оттуда.

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

Ошибка при выполнении команды docker pull: "request canceled while waiting for connection"

Введение

В рамках этой статьи мы детально разберем ошибку, возникающую при попытке загрузки контейнеров Docker, а именно сообщение:

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)

Клиент использует систему Ubuntu 18.04 и Docker версии 18.09.4. Данная проблема может возникать по ряду причин, связанных с сетевыми настройками, настройками DNS, а также возможными проблемами в работе самого Docker.

Анализ проблемы

  1. Сетевые настройки и DNS

    • Вы упомянули, что вы не используете прокси или VPN, что исключает одни из наиболее распространенных причин проблемы.
    • Путем выполнения команды dig index.docker.io вы обнаружили, что DNS-сервер, используемый по умолчанию (127.0.0.53), ведет к более длительному времени отклика по сравнению с DNS-сервером Google (8.8.8.8). Это может указывать на проблемы с локальным DNS-кешированием или с самим DNS-сервером, активируемым NetworkManager.
  2. Тестирование DNS

    • Разница в ответах dig с использованием разных DNS-серверов подтверждает, что решение вашей проблемы связано с неправильной конфигурацией DNS. В этом случае использование DNS Google (8.8.8.8) обеспечивает более быстрое и надёжное разрешение имени хоста.
  3. Настройка DNS в системе

    • Изменения в /etc/resolv.conf, в том числе добавление nameserver 8.8.8.8, как временное решение, могут привести к возвращению старых настроек при перезагрузке или изменении конфигурации сети. Это связано с тем, что файл управляется NetworkManager или другими демонами, такими как systemd-resolved.

Решения

1. Настройка DNS с помощью NetworkManager

Чтобы изменить настройки DNS, которые управляются NetworkManager, выполните следующие шаги:

  • Откройте конфигурацию вашего сетевого подключения:
    nm-connection-editor
  • Выберите ваше подключение и перейдите на вкладку "IPv4".
  • В поле "DNS-серверы" укажите 8.8.8.8.
  • Сохраните изменения и перезагрузите подключение.

2. Использование /etc/hosts

Если вы хотите использовать статическое разрешение для index.docker.io, вы можете добавить одну из IP-адресов, полученных с помощью команды dig, в файл /etc/hosts. Это, однако, не рекомендуется для общих сценариев, поскольку IP-адреса могут изменяться:

52.207.42.240 index.docker.io

3. Устранение проблем с dnsmasq

Если вы используете dnsmasq, вам следует убедиться, что он корректно настроен. Проверьте, какие DNS-серверы он использует и попробуйте отключить dnsmasq, чтобы временно проверить, решит ли это проблему:

sudo systemctl stop dnsmasq

После этого ещё раз попробуйте выполнить команду docker pull.

Заключение

Ошибка при загрузке Docker-контейнеров "request canceled while waiting for connection" может быть вызвана множеством факторов, наиболее распространённым из которых является неправильная конфигурация DNS. Перепроверяя настройки и переключая DNS-серверы, вы можете значительно улучшить производительность и стабильность подключения к Docker Hub. Попробуйте предложенные решения, чтобы устранить возникшую проблему. Если вы продолжаете сталкиваться с трудностями, возможно, стоит рассмотреть возможность более детального изучения сетевых конфигураций или обращения к вашему интернет-провайдеру за дополнительной поддержкой.

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

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