
У меня есть образ docker, работающий на multipass на физическом хосте. Контейнер docker пытается подключиться к службе, работающей на физическом хосте. Однако разрешение dns сообщает docker, что ip-адрес — 127.0.1.1
. Я думаю, что поиск dns в vm возвращает локальный ip-адрес, когда требуется публичный адрес:
physical host: culsu (ubuntu 18.04)
multipass host: promlife (ip: 10.13.31.13) (ubuntu 22.04)
docker container: prometheus (ip: 172.18.0.9)
dns lookup of promlife: 127.0.1.1
Я думаю, что проблема может быть решена, если DNS-сервер promlife
вернется10.13.31.13
С физической машины:
$ ping promlife
PING promLife (10.13.31.13) 56(84) bytes of data.
Из promlife vm:
$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.
Из контейнера Docker:
$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.
Есть ли у кого-нибудь мысли о том, что мне нужно изменить, чтобы Prometheus разрешил виртуальный хост?
Связана ли проблема потенциально с systemd-resolved?
Спасибо за вашу помощь!
решение1
Адрес 127.0.1.1 — это адрес, который хосты Linux настраивают как адрес «себя по имени» в /etc/hosts
. При запуске ping
(или чего-либо еще, использующего разрешение имен POSIX) он будет использовать библиотеку nsswitch
для просмотра /etc/hosts
файла, чтобы найти значение неполного имени.
Я не уверен, почему это происходит внутри контейнера — каким-то образом он выгружается в nsswitch
библиотеку хоста, возможно, это особенность Docker.
В любом случае, если вы хотите получить доступ к хосту Docker из контейнера Docker, правильным способом будет использование специального имени хоста, которое Docker автоматически преобразует в IP-адрес хоста Docker в локальной сети контейнера, который называется host.docker.internal
.
Попробуйте: ping host.docker.internal
из вашего контейнера.
решение2
Вам необходимо обновить конфигурацию DNS впромжизнь, вы можете отредактировать файл /etc/netplan/netcfg.yaml. Изменитесерверы именполе, указывающее на предпочитаемый вами DNS-сервер.
network:
version: 2
ethernets:
ens:
addresses: [10.13.31.13/24] # Your IP configuration
gateway4: 10.13.31.1 # Your gateway
nameservers:
addresses: [8.8.8.8]
После обновления конфигурации примените ее.
sudo netplan apply
Перезапуститеsystemd-разрешеносервис, чтобы убедиться, что он учитывает изменения.
sudo systemctl restart systemd-resolved