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