
我有一個在實體主機上的多通道上運行的 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