#Что означает ошибка
ping: bad address / nslookup: can't resolve
В Alpine DNS настраивается через /etc/resolv.conf, но файл может быть перезаписан DHCP-клиентом или контейнерной средой. musl резолвер ведёт себя иначе, чем glibc: он опрашивает серверы параллельно, не поддерживает некоторые опции (search-расширения до недавних версий), а ответы с большими пакетами используют TCP.
Проверьте, откуда берётся файл и какие серверы указаны.
Затем протестируйте разрешение имён.
Если ping по IP работает, а по имени нет, проблема в DNS: пустой resolv.conf, недоступный DNS-сервер или особенности musl при больших ответах.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Пустой resolv.conf | Нет nameserver. | Добавьте. |
| DNS недоступен | Сеть. | Проверьте. |
| Особенности musl | Ответы TCP. | Обновите. |
| Сеть контейнера | Docker. | Задайте --dns. |
#Пошаговое решение
- Выведите /etc/resolv.confВ консоли Alpine или внутри контейнера выполните
cat /etc/resolv.conf, чтобы посмотреть адреса DNS-серверов после строкnameserver. Если файл пуст или содержит недоступный адрес, выясните, кто его создал: сеть Alpine, DHCP, Docker или Kubernetes. В контейнере файл часто формируется системой запуска и ручная правка исчезнет при пересоздании. Перед заменой проверьте разрешение имён через следующий шаг. - Проверьте разрешение nslookup/digВ терминале Alpine сначала проверьте связь по IP командой
ping -c 3 1.1.1.1(если сеть разрешает ICMP). Затем выполнитеnslookup example.org; при наличииdigможно использоватьdig example.org. Если IP доступен, а имя не разрешается, проблема вероятнее в DNS. Если не работает даже IP, сначала проверяйте маршрут черезip routeи подключение; не заменяйте файл/etc/resolv.confнаугад, поскольку он может управляться DHCP или NetworkManager. - Задайте серверы вручную или через сетевой конфигВ Alpine откройте терминал и прочитайте
cat /etc/resolv.conf, затемcat /etc/apk/repositoriesиping -c 3 1.1.1.1. Проверьте, откуда сеть получает DNS (DHCP, NetworkManager или статическая настройка): ручное изменение/etc/resolv.confчасто временно и переписывается при подключении. На сервере SSH не меняйте сеть без резервного канала доступа. - Для контейнеров настройте DNS в DockerЕсли проблема возникает только в Docker-контейнере, проверьте DNS на хосте и в контейнере:
docker exec ИМЯ_КОНТЕЙНЕРА cat /etc/resolv.conf, заменив имя реальным изdocker ps. Для одного сервиса в Docker Compose задавайте параметрdns:в его конфигурации с DNS-серверами, доступными из вашей сети, затем пересоздавайте только этот сервис в запланированное окно. Не редактируйте/etc/resolv.confвручную внутри контейнера как постоянное решение. - Учитывайте особенности muslВ Alpine используется библиотека musl, и её особенности разрешения имён могут отличаться от glibc. Если DNS по IP доступен, но отдельные имена не разрешаются только внутри контейнера, сравните
nslookup ИМЯ_ХОСТАилиgetent hosts ИМЯ_ХОСТАна хосте и внутри Alpine. Проверьте версии Alpine и конфигурацию DNS в системе контейнеризации. Не устанавливайте glibc из неизвестных источников ради исправления DNS. - Проверка настроек DNS и доступности сетиLinux · Терминал (Bash)КомандаПроверка настроек DNS и доступности сети.
cat /etc/resolv.confping -c 2 8.8.8.8
#Диагностика
Выведите конфигурацию: cat /etc/resolv.conf. Проверьте: nslookup example.com (BusyBox) или apk add bind-tools && dig example.com. Тест связи: ping -c2 1.1.1.1 — если IP работает, а имя нет, проблема в DNS. Для контейнеров смотрите docker run --dns 1.1.1.1 и docker inspect. Проверьте сеть: ip a, ip route.
#Постоянная настройка
Для обычной системы Alpine: в /etc/network/interfaces для DHCP — DHCP-клиент сам запишет DNS; чтобы задать вручную, используйте udhcpc с -O либо файл /etc/udhcpc/udhcpc.conf с RESOLV_CONF="no", и запишите: echo "nameserver 1.1.1.1" > /etc/resolv.conf. Через setup-dns: setup-dns. Для статического адреса в /etc/network/interfaces добавьте dns-nameservers 1.1.1.1 8.8.8.8 (нужен пакет openresolv: apk add openresolv).
#Docker и Kubernetes
В контейнере файл генерирует Docker: задайте --dns, dns: в compose или daemon.json ("dns": ["1.1.1.1"]). Проверка в Kubernetes: cat /etc/resolv.conf (CoreDNS), параметр ndots:5 увеличивает число запросов; для musl с длинными search-доменами используйте полное имя с точкой (service.ns.svc.cluster.local.). Если ответ медленный, проверьте UDP/TCP 53 и MTU.
cat /etc/resolv.confnslookup apple.com