Rocky Linux Rocky Linux

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

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

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

В контейнере сеть по IP работает, но имена не находятся. Важны его resolv.conf, сетевой backend Podman и внутренняя DNS-служба, а не только DNS хоста.

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

#Когда возникает проблема и к каким системам относится

В контейнере сеть по IP работает, но имена не находятся. Важны его resolv.conf, сетевой backend Podman и внутренняя DNS-служба, а не только DNS хоста. Rocky Linux 8/9/10 с Podman или Docker; команды для Podman показаны отдельно, не переносите их автоматически на Docker и Kubernetes.

#Основные причины: как отличить одну от другой

Возможная причинаКак узнатьЧто делать
Контейнер получил неправильный DNSВнутренний /etc/resolv.conf содержит недоступный адресgetent работает на хосте, в контейнере — нетСопоставить конфигурацию Podman и DNS сети
Сбой внутреннего DNS podmanДля пользовательской сети не разрешаются имена соседних контейнеровpodman network inspect сообщает dns_enabled/настройкиПроверить сеть и backend aardvark-dns
Отличие rootless сетиКонтейнер исполняется не от root, DNS и namespace иныеpodman info указывает rootlessНастраивать DNS именно нужному пользователю

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

  1. Шаг 1. Сначала подтвердите DNS-сбой на хостеОткройте терминал именно хоста Rocky Linux, проверьте разрешение публичного имени. Если оно уже не работает на хосте, начните с NetworkManager, иначе изменения контейнера бессмысленны.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    getent ahostsv4 rockylinux.org
    nmcli -f NAME,DEVICE connection show --active
  1. Шаг 2. Определите контейнер и способ его запускаСмотрите список Podman от того же пользователя, который владеет контейнером. sudo podman ps отображает другую группу контейнеров. Для Docker используйте его документацию и docker ps, а не Podman-команды.
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    podman ps --format "{{.ID}} {{.Names}} {{.Networks}}"
    podman info --format "{{.Host.Security.Rootless}}"
  1. Шаг 3. Прочитайте DNS непосредственно внутри контейнераЗамените ИМЯ_КОНТЕЙНЕРА настоящим именем. Если в образе нет getent или sh, это нормально для минимального образа; проверку нужно выполнить поддерживаемой утилитой приложения, не устанавливая случайно пакет в работающий контейнер.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    CON="ИМЯ_КОНТЕЙНЕРА"
    podman exec "$CON" cat /etc/resolv.conf
    podman exec "$CON" getent hosts rockylinux.org
  1. Шаг 4. Узнайте, к какой сети подключён контейнерinspect покажет сеть и конфигурацию DNS, по которым он запущен. Не отключайте мост или сеть для всех контейнеров ради одного; сначала поймите, требует ли приложение разрешения имён других контейнеров или публичного DNS.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    CON="ИМЯ_КОНТЕЙНЕРА"
    podman inspect "$CON" --format "{{json .NetworkSettings.Networks}}"
    podman network ls
  1. Шаг 5. Проверьте настройки конкретной сетиВ следующем шаге замените имя сети результатом inspect. В сети Podman встроенное DNS-разрешение имён контейнеров зависит от backend, режима сети и параметра dns_enabled. Не делайте вывод лишь из адреса 127.0.0.1 внутри контейнера: это его собственный namespace.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    NET="ИМЯ_СЕТИ"
    podman network inspect "$NET"
  1. Шаг 6. Сравните rootless с rootful без переключения правrootless Podman и rootful Podman имеют разные области хранения и сетевые процессы. Если контейнер обслуживается systemd пользователя, изменения конфигурации root не затронут его. Заданный при создании --dns может не обновиться для уже созданного контейнера.
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    podman info --debug | grep -Ei "rootless|networkBackend|network backend" | head -30
    id
  1. Шаг 7. Применяйте DNS только после доказательства причиныДля вновь создаваемого тестового контейнера можно указать DNS, утверждённый администратором, но не размещайте публичный DNS в корпоративной сети без согласования. После корректировки конфигурации пересоздайте только целевой контейнер из его описания/манифеста, не удаляя тома; затем повторите getent из него.
  2. Терминал Rocky Linux; административные права не обязательны
    Linux · Терминал (Bash)Команда
    Терминал Rocky Linux; административные права не обязательны. Диагностика или адресная проверка; выполните только при соответствии условиям шага.
    CON="ИМЯ_КОНТЕЙНЕРА"
    podman exec "$CON" cat /etc/resolv.conf
    podman exec "$CON" getent hosts rockylinux.org

#Как убедиться, что неисправность устранена

Именное разрешение работает в конкретном контейнере; приложение может соединяться с требуемыми узлами и продолжает это делать после штатного пересоздания.

#Если предложенный способ не сработал

Если контейнер запускается не Podman или использует Kubernetes, сверяйте DNS с его оркестратором; приложите podman inspect и resolv.conf без секретов, не меняйте общесистемный DNS наугад.

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

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

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