в контейнере нет доступа к DNS при работающей сети хоста — как найти причину и исправить

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

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

В контейнере Podman или Docker на Arch Linux доступен IP-адрес, но доменные имена не разрешаются, тогда как на хосте DNS работает. Прежде всего уточните используемый контейнерный движок и rootless/rootful-режим: настройка Podman netavark и Docker встроенного DNS различается.

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

#Симптом и границы применимости

В контейнере Podman или Docker на Arch Linux доступен IP-адрес, но доменные имена не разрешаются, тогда как на хосте DNS работает. Прежде всего уточните используемый контейнерный движок и rootless/rootful-режим: настройка Podman netavark и Docker встроенного DNS различается.

#Возможные причины и признаки

Возможная причинаКак узнатьЧто делать
DNS внутри контейнера отличаетсяКонтейнер использует /etc/resolv.conf, сформированный движком, а не файл хоста.nameserver внутри контейнера иной или недоступен.Сопоставить адреса и источники настроек.
DNS-прокси контейнерной сети недоступенPodman с aardvark-dns или Docker со встроенным резолвером зависит от состояния сети.IP проходит, запрос DNS контейнера уходит не туда.Проверить сеть и журнал именно используемого движка.
Хостовый адрес 127.0.0.53 недостижим из контейнераLoopback каждого сетевого пространства отдельный.В контейнер вручную передан localhost-resolver хоста.Настроить доступный контейнеру DNS без отключения защит.

#Подробная диагностика и безопасные действия

  1. 1. Уточните движок и способ запускаОткройте терминал на хосте Arch Linux. Выберите только установленный движок; podman info и docker info не взаимоисключающие, но их настройки нельзя смешивать. Для rootless Podman используйте обычного пользователя.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    command -v podman
    command -v docker
    podman info --format "{{.Host.NetworkBackend}}"
  1. 2. Сравните сеть на хосте и в контейнереНа хосте получите адрес для домена и маршрут. Если хост не разрешает имена, сначала исправьте хостовый DNS. Если ошибка только внутри конкретного контейнера — продолжайте с его настройками.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    getent ahostsv4 archlinux.org
    ip route
    cat /etc/resolv.conf
  1. 3. Проверьте IP и resolver внутри нужного контейнераПодставьте настоящее имя контейнера. podman exec или docker exec запускать для существующего активного контейнера; если в минимальном образе нет getent, достаточно показать resolv.conf и применить доступный инструмент приложения.
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    podman ps --format "{{.Names}}"
    podman exec ИМЯ_КОНТЕЙНЕРА cat /etc/resolv.conf
    podman exec ИМЯ_КОНТЕЙНЕРА getent hosts archlinux.org
  1. 4. Сопоставьте параметры сети без изменения контейнераВыведите, к какой сети подключён контейнер, и найдите DNS в его inspect. Для Docker подставьте docker вместо podman и изучите собственное устройство сети; не удаляйте виртуальные мосты на работающем сервере.
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    podman inspect ИМЯ_КОНТЕЙНЕРА --format "{{json .NetworkSettings.Networks}}"
    podman network ls
  1. 5. Проверьте связанные системные службы и фильтрыДля Podman с netavark посмотрите журналы ошибок DNS, статус системы и правила firewall без изменения. На rootless-конфигурации не нужно предполагать наличие системной службы podman.service: контейнеры могут управляться без демона.
  2. Правила только читаются
    Linux · Терминал (Bash)КомандаНужен sudo
    Правила только читаются. Не сбрасывайте nftables или firewall на удалённом узле.
    journalctl -b --no-pager -g "aardvark|netavark|dns" -n 60
    sudo nft list ruleset
  1. 6. Исправляйте DNS на уровне выбранного контейнераЕсли контейнер был создан с нерабочим --dns=127.0.0.53 или унаследовал недоступный адрес, подготовьте исправленный конфигурационный файл запуска/compose по документации вашего движка и контролируемо пересоздайте только этот контейнер. Изменение DNS может нарушить корпоративные зоны и имена соседних контейнеров; данных не удаляйте.
  2. Дополнительная команда по теме
    Linux · Терминал (Bash)Команда
    Диагностические команды; дальнейшее пересоздание контейнера выполняйте отдельно с сохранёнными томами и параметрами.
    podman inspect ИМЯ_КОНТЕЙНЕРА
    podman network inspect ИМЯ_СЕТИ
  1. 7. Проверьте DNS после корректировкиСнова сравните разрешение имени на хосте и внутри контейнера, включая внутренние имена сервисов, если они используются. При неуспехе соберите вывод inspect и resolv.conf; не перезапускайте вслепую всё сетевое окружение.
  2. Диагностическая команда в терминале Arch Linux, без изменения настроек
    Linux · Терминал (Bash)Команда
    Диагностическая команда в терминале Arch Linux, без изменения настроек.
    getent hosts archlinux.org
    podman exec ИМЯ_КОНТЕЙНЕРА getent hosts archlinux.org

#Как понять, что проблема устранена

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

#Что делать, если не помогло

Не применяйте случайные советы для другого дистрибутива: в Arch Linux особенно опасны частичные обновления пакетов, а в Rocky Linux — отключение SELinux или неконтролируемый перезапуск системных служб. Остановитесь после неуспешного безопасного шага, зафиксируйте фактическое сообщение и вернитесь к соответствующей причине. Для загрузки, разделов диска и единственного удалённого подключения используйте резервную копию и локальную консоль.

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

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

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