ubuntu vm將內部ip返回docker映像

ubuntu vm將內部ip返回docker映像

我有一個在實體主機上的多通道上運行的 docker 映像。 docker 容器正在嘗試連接到實體主機上執行的服務。然而,dns解析告訴docker IP位址是127.0.1.1.我認為當需要公共位址時,虛擬機器中的 dns 會尋找返回本地 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

promlife我認為如果 dns 伺服器返回,問題可以解決10.13.31.13

從物理機:

$ ping promlife
PING promLife (10.13.31.13) 56(84) bytes of data.

從 promlife 虛擬機器:

$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.

從泊塢窗容器:

$ ping promlife
PING promlife (127.0.1.1) 56(85) bytes of data.

有誰知道我需要更改什麼才能讓普羅米修斯解析虛擬主機?

該問題是否可能與 systemd-resolvd 有關?

感謝您的幫忙!

答案1

位址 127.0.1.1 是 Linux 主機設定為「透過名稱本身」的位址的位址/etc/hosts。當您執行ping(或任何使用 POSIX 名稱解析的其他程式)時,它將使用該程式nsswitch庫來查看檔案/etc/hosts以查找非完全限定名稱的含義。

我不確定為什麼從容器內部它會這樣做 - 它以某種方式卸載到主機nsswitch庫,也許它是 Docker 的東西。

無論如何,如果你想從 docker 容器內存取 Docker 主機,正確的方法是使用 docker 自動解析為容器本地網路上 docker 主機的 IP 位址的特殊主機名稱 - 稱為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

相關內容