Ubuntu vm возвращает внутренний IP-адрес образу Docker

Ubuntu vm возвращает внутренний IP-адрес образу Docker

У меня есть образ 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

Связанный контент