Docker LinuxDocker Desktop

Docker: В контейнере Docker не работает DNS при доступной сети хоста

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Внутри контейнера не разрешаются доменные имена, хотя хост имеет доступ к сети. Нужно разделить ошибку DNS и проблему маршрутизации: сбой имени не равен полному отсутствию сети.

В этой статье
  1. Как выглядит неисправность
  2. Причины и признаки
  3. Пошаговое устранение
  4. Как проверить результат
  5. Если проблема осталась

#Как выглядит неисправность

Внутри контейнера не разрешаются доменные имена, хотя хост имеет доступ к сети. Нужно разделить ошибку DNS и проблему маршрутизации: сбой имени не равен полному отсутствию сети.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
DNS-резолвер контейнера недоступенgetent hosts выдаёт ошибку, но связь по IP естьnameserver в /etc/resolv.conf не отвечаетПроверить сеть Docker и DNS хоста
Прокси/VPN меняет DNS хостаКонфигурация сети хоста изменилась после старта DockerНесколько контейнеров одновременно потеряли резолвингСогласовать DNS демона/сети, пересоздать тестовый контейнер

#Пошаговое устранение

  1. 1. Выберите конкретный контейнер и проверьте симптомыВ терминале с доступом к Docker выполните docker ps, затем docker logs --tail 50 ИМЯ. Найдите ENOTFOUND, Temporary failure in name resolution или сообщение резолвера. Если ошибка TLS/HTTP, это другая проблема.
    Linux · Терминал (Bash)Команда
    Чтение состояния, не меняет сеть.
    docker ps
    docker logs --tail 50 ИМЯ
  1. 2. Проверьте имя на самом хостеНа Linux-хосте запустите getent hosts example.org, на Windows проверьте Resolve-DnsName example.org в PowerShell. Если хост также не разрешает имя, сначала разберите настройки сети хоста — Docker тут может быть ни при чём.
    Linux · Терминал (Bash)Команда
    Linux-хост; выводит IP при исправном разрешении имени. Если нет getent, используйте штатный инструмент системы.
    getent hosts example.org
  1. 3. Посмотрите DNS в контейнереЗапустите docker exec ИМЯ cat /etc/resolv.conf (для Linux-образов). В пользовательской сети часто встречается встроенный 127.0.0.11, что нормально. Если cat отсутствует в минимальном образе, изучите конфигурацию через docker inspect, а не устанавливайте утилиты в рабочий контейнер.
    Linux · Терминал (Bash)Команда
    Только чтение, команда cat может отсутствовать в distroless-образе.
    docker exec ИМЯ cat /etc/resolv.conf
  1. 4. Уточните тип сетиПроверьте docker inspect --format ... ИМЯ и имя используемой сети. Убедитесь, что контейнер не запущен с network_mode: none и не отключён от нужной сети. На macOS/Windows Docker Desktop сеть устроена иначе, чем в Linux.
    Linux · Терминал (Bash)Команда
    Только чтение; показывает имена сетей и IP.
    docker inspect --format '{{json .NetworkSettings.Networks}}' ИМЯ
  1. 5. Повторите проверку в отдельном тестовом контейнереСоздайте тестовый контейнер с образом, который уже одобрен организацией, в той же сети и выполните getent hosts example.org. Если в тестовой копии DNS работает, исследуйте настройки и приложение исходного контейнера, а не меняйте весь Docker.
  1. 6. Исправьте источник DNS согласно своей сетиЕсли DNS хоста компании требует внутренние серверы, согласуйте их с администратором и задайте dns: для конкретного сервиса в compose.yaml либо настройку демона по правилам инфраструктуры. После проверки docker compose config пересоздайте только тестовый сервис и повторите запрос.
  1. 7. Проверьте восстановление приложенияОткройте прежний URL или повторите безопасный запрос приложения, проверьте отсутствие ENOTFOUND в свежих журналах. Если сбой повторяется только через VPN, проверьте его DNS и маршруты с сетевым администратором.

#Как проверить результат

Успех: имя разрешается в контейнере и запрос к целевому сервису проходит. Запрос по IP без DNS сам по себе не доказывает исправления.

#Если проблема осталась

Не повторяйте опасные действия на рабочем окружении. Сравните первоначальный симптом с новым состоянием, сохраните обезличенные сообщения и версии компонентов, проверьте резервную копию; перед изменением общей истории Git или данных/сети Docker обратитесь к ответственному администратору проекта.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.