Вопрос или проблема
Как я могу исправить эту проблему в 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”.
sudo vim /etc/docker/daemon.json
(или используйте~/.docker
)- Введите ваш желаемый DNS-запись:
{
"dns": ["YOUR.DNS.IP.HERE"]
}
sudo systemctl daemon-reload
(можно пропустить)sudo systemctl restart docker
И это сработало! Я смог войти в Docker hub и загружать образы.
Шаги:
- Удалите пакет resolvconf и управляйте /etc/resolv.conf вручную
sudo apt purge resolvconf
- Удалите /etc/resolv.conf
sudo rm /etc/resolv.conf
- Создайте файл, если он не существует
touch /etc/resolv.conf
- Отредактируйте файл:
nano /etc/resolv.conf
и добавьте следующее:
nameserver 8.8.4.4
nameserver 8.8.8.8
- Вот и все. Теперь вы можете тянуть ваш 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 как потенциальную причину проблемы.
Применение
-
Настройка прокси-сервера
- Проверьте правильность настроек прокси-сервера. Убедитесь, что в файле
~/.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
-
Настройка 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
-
Обновление /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 должна работать как ожидалось.
-
Диагностика сетевых проблем
Если проблема повторяется, возможно, следует глубже исследовать сетевые настройки Ubuntu. Проверьте брандмауэр, настройки NAT, и наличие любых ограничений со стороны провайдера.
Это руководство включает основные диагностические шаги и исправления для решения проблемы с Docker на Ubuntu. При следовании этим рекомендациям важно учитывать специфические особенности вашего сетевого окружения. Если проблема не решается, рекомендуется обратиться за помощью к сети или специалистам по системному администрированию.