Debian Debian 12Debian 13

Debian Linux: в контейнере нет доступа к DNS при работающей сети хоста

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

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

Контейнер Docker на Debian не открывает домены, хотя хостовая система успешно обращается к ним. DNS контейнера зависит от режима сети, конфигурации Docker Engine и назначения серверов; адрес 127.0.0.1 внутри контейнера указывает на сам контейнер, а не на хост.

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

#Когда возникает ошибка в Debian и какие условия важны

Контейнер Docker на Debian не открывает домены, хотя хостовая система успешно обращается к ним. DNS контейнера зависит от режима сети, конфигурации Docker Engine и назначения серверов; адрес 127.0.0.1 внутри контейнера указывает на сам контейнер, а не на хост.

#Причины и как отличить их друг от друга

Возможная причинаКак узнатьЧто делать
Контейнер использует неработающий DNSХост разрешает имя, внутри ошибка temporary failure in name resolution.Сравнить /etc/resolv.conf контейнера и режим сети.
В сети контейнера нет выходаДаже соединение к разрешённому IP не работает.Проверить маршрут, bridge и межсетевой экран до DNS.
Собственная настройка переопределяет DNSВ docker inspect или compose задан dns, конфликтующий с доступной сетью.Исправить источник настроек и пересоздать тестовый контейнер.

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

  1. 1. Проверьте имя нужного контейнера и режим сетиВ терминале Debian на хосте убедитесь, что установлен Docker и вы авторизованы для его управления. docker ps покажет имена и состояние; членство в группе docker фактически даёт привилегии уровня root, поэтому не добавляйте туда пользователей ради удобства диагностики.
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    docker ps --format "table {{.Names}}\t{{.Status}}"
    docker network ls
  1. 2. Убедитесь, что на самом хосте разрешение доменов работаетВыполните getent ahostsv4 для проверочного имени и откройте /etc/resolv.conf на хосте. Если уже здесь ошибка, надо сначала исправить сеть Debian, а не менять Docker. При запрете доступа к внешним доменам используйте разрешённое внутреннее доменное имя.
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    getent ahostsv4 debian.org
    cat /etc/resolv.conf
  1. 3. Сверьте DNS и сеть внутри работающего контейнераУкажите настоящее ИМЯ_КОНТЕЙНЕРА. Команда docker exec cat читает resolv.conf без изменения данных, но в некоторых минимальных образах может отсутствовать даже cat; тогда inspect покажет настройки сети. Не подменяйте /etc/resolv.conf через docker exec: при перезапуске он будет создан снова.
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    docker exec ИМЯ_КОНТЕЙНЕРА cat /etc/resolv.conf
    docker inspect --format "{{.HostConfig.NetworkMode}}" ИМЯ_КОНТЕЙНЕРА
  1. 4. Определите, задан ли собственный DNS приложениюКоманда inspect выводит только сетевой режим и поле Dns, не раскрывая остальные потенциально секретные переменные контейнера. Пустой список обычно означает наследование политики Docker, но не доказывает, что DNS достижим. Для сети user-defined bridge Docker может применять встроенный DNS по 127.0.0.11.
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    docker inspect --format "{{json .HostConfig.Dns}}" ИМЯ_КОНТЕЙНЕРА
    docker inspect --format "{{json .NetworkSettings.Networks}}" ИМЯ_КОНТЕЙНЕРА
  1. 5. Не перепутайте DNS и отсутствие маршрута наружуСравните доступ из контейнера к IP-адресу разрешённого сервиса и к его имени через штатное приложение, если в образе есть curl или wget. Ошибка по обоим путям указывает на сеть/firewall, а не только DNS. Не ставьте инструменты в рабочий контейнер автоматически — это меняет образ среды.
  2. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    docker network inspect bridge
  1. 6. Проверьте, где хранится конфигурация Docker EngineНа обычном Linux сервере файл демона — /etc/docker/daemon.json. Если в нём задан ключ dns, выясните, откуда взяты адреса и доступны ли они по сети контейнера; в rootless режиме путь иной. Перед редактированием сохраните копию файла, не перезапускайте Docker на производстве без оценки влияния на запущенные приложения.
  2. Если конфигурационного файла нет, это допустимо; не создавайте его без причины
    Linux · Терминал (Bash)КомандаНужен sudo
    Если конфигурационного файла нет, это допустимо; не создавайте его без причины.
    sudo cat /etc/docker/daemon.json
    systemctl status docker --no-pager
  1. 7. Проверьте решение на изолированном тестеПосле согласованного исправления настроек сети приложения запустите штатную проверку DNS внутри того же контейнера или нового безвредного тестового, уже имеющего нужную утилиту. Контролируйте разрешение имени и реальное сетевое соединение отдельно; если результат временный, проверьте DNS в compose и при перезапуске контейнера.
  2. Чтение данных и диагностика
    Linux · Терминал (Bash)Команда
    Чтение данных и диагностика. Изменений нет.
    docker exec ИМЯ_КОНТЕЙНЕРА cat /etc/resolv.conf
    getent ahosts debian.org

#Проверка результата и действия при неуспехе

Успех — именно контейнер разрешает нужные имена и устанавливает сетевое соединение после пересоздания или перезапуска, а работа остальных контейнеров не нарушена.

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

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

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