Битлента
Ошибки и коды3 мин чтения·

curl (6): Could not resolve host — как исправить

Ошибка curl (6) Could not resolve host: имя не удалось разрешить. Опечатки, DNS, промежуточный сервер, файл hosts, контейнеры. Проверка по шагам.

Что говорит curl

Сообщение «curl: (6) Could not resolve host: имя» означает, что программа не смогла преобразовать имя узла в IP-адрес. До установления соединения и отправки запроса дело не дошло: curl остановился ещё на этапе разрешения имени.

Поэтому исследовать нужно не сервер и не протокол, а именно DNS и всё, что с ним связано: написание имени, настройки резолвера, промежуточный сервер, доступность сети.

Формулировки чуть отличаются в разных версиях и системах, но код 6 всегда означает одно и то же: разрешение имени завершилось неудачей. Поэтому подход к диагностике не зависит от системы, на которой вы запускаете curl.

Причины по убыванию вероятности: curl (6)

Самая частая причина — опечатка или лишние символы в имени: пробел, кириллица вместо латиницы, двоеточие, забытая точка. Следующая — отсутствие сети или нерабочий DNS: система не может связаться с сервером имён. Далее — неверные настройки шлюза или переменные окружения с промежуточного сервера, из-за которых curl пытается разрешать имя не там.

В контейнерах и виртуальных машинах причина нередко в том, что внутри нет доступа к DNS хоста. Также встречаются устаревшие записи в hosts и несуществующее имя, например только что созданный домен, который ещё не разошёлся по DNS.

Есть и менее очевидный случай: имя написано верно, но содержит национальные символы, и curl не преобразовал его в допустимую форму. Для таких доменов используйте их представление в форме с префиксом xn--, которое видно в адресной строке браузера при копировании.

Проверка по шагам: curl (6)

Сначала проверьте написание имени. Скопируйте его и убедитесь, что в нём нет лишних символов. Затем выполните запрос имени через nslookup или dig: если они тоже не разрешают имя, проблема в DNS, а не в curl. Если они разрешают, а curl нет, причина в настройках curl или окружения.

Попробуйте обратиться по IP-адресу. Если так работает, связь есть, и вопрос точно в разрешении имён. Проверьте, есть ли интернет вообще, например через обращение к известному узлу.

При использовании curl из среды с ограниченной сетью, например из песочницы или из задания CI, учитывайте, что исходящий DNS может быть запрещён политикой. Тогда любое имя не разрешается, а по IP-адресу связь работает.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно

Что исправить: curl (6)

Если DNS не работает, исправьте настройки резолвера: посмотрите содержимое системного файла со списком DNS-серверов, проверьте, что они указаны верно и доступны. Смените на рабочие. Проверьте, нет ли переменных окружения с промежуточного сервера, и при необходимости уберите их для теста или используйте параметр, отключающий промежуточный сервер.

Проверьте файл hosts: в нём не должно быть ошибочных записей для нужного имени. В случае сети с фильтрацией DNS убедитесь, что запрос не перехватывается внутренним резолвером.

Контейнеры, скрипты и автоматизация

В контейнере проверьте настройки DNS самого контейнера или сети, в которой он запущен. Иногда они наследуются от хоста и указывают на адрес локального резолвера, недоступный изнутри. В таких случаях явно задайте внешние DNS-серверы для контейнера.

В скриптах и системах непрерывной интеграции ошибка часто временная. Используйте параметры повторных попыток и проверяйте, что сетевые ресурсы доступны на момент запуска. Убедитесь, что имя не подставляется из пустой переменной.

Если вы работаете через промежуточный сервер, для запросов имён иногда важно, кто именно их выполняет: клиент или промежуточный сервер. Параметры curl, отвечающие за это, влияют на то, где возникнет ошибка разрешения, поэтому проверьте их в документации утилиты.

Как отличить временную ошибку от постоянной

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

Такое разделение экономит время: вместо попыток менять всё подряд вы сразу видите, где искать.

Сохраняйте в скрипте вывод подробного режима на время отладки: там видны этапы разрешения и адрес, к которому обращается curl. Это наиболее оперативный способ найти разницу между ожидаемым и реальным поведением.

🛡️ Остались проблемы с соединением?
Можно пользоваться постоянно: российские приложения работают, включать и выключать ничего не нужно. Без карты и регистрации, настройка за пару минут.
Попробовать бесплатно
curldnsкомандная строкаошибки

Часто задаваемые вопросы

Читайте также