linux - localhost在Docker容器中的含義是什麼?




(2)

當然,如果你在容器中運行命令,它將是你的容器。

/opt/lampp/bin/mysql -h localhost -u root -pThePassword

如果你在容器內運行這個命令,那麼它將嘗試連接在容器內運行的mysql。

如果我在docker容器中使用此命令,請說。

/opt/lampp/bin/mysql -h localhost -u root -pThePassword

這裡的localhost會引用什麼? 主機的IP或docker容器自己的IP?


從容器內部 localhost 始終引用當前容器。 它從不引用另一個容器,它從不引用在物理系統上運行的任何不在同一容器中的東西。 對 localhost 進行出站連接或將 localhost 配置為數據庫主機通常不常用。

從主機系統上的shell localhost 可以引用在Docker外部的系統上運行的守護進程,或者使用 docker run -p 選項發布的端口。

在不同的系統中 localhost 指的是從中調用的系統。

就IP地址而言 localhost 始終為127.0.0.1,並且該IP地址是特殊的,並且始終是 localhost ,其行為與上面相同。

如果要連接到容器......

...從另一個容器 ,最好的方法是確保它們在同一個Docker網絡上(你從同一個Docker Compose YAML文件啟動它們;你做了一個 docker run --net ... docker network create 然後做了 docker run --net ... 在同一網絡上)並使用Docker的內部DNS服務通過Docker Compose YAML文件中的容器名稱或名稱以及容器內的端口號來引用它們。 即使目標具有已發布的端口,其中包含 docker run -p 選項或Docker Compose ports: 設置,也請使用 第二個 (容器內部)端口號。

...從Docker空間外部 ,確保使用 docker run -p 或Docker Compose ports: 選項啟動容器,並使用該選項中的第一個端口號連接到 主機的 IP地址或DNS名稱。

...在同一物理主機上的終端窗口或瀏覽器中 ,而不是在容器中,在這種情況下,僅在這種情況下, localhost 將始終如一地工作。

除了:

如果您使用 --net host 啟動了容器,則 localhost 引用物理主機,並且您位於“同一物理主機上的終端窗口”方案中。

如果您已經不再使用同一容器中的多個服務器,則可以使用 localhost 在它們之間進行通信。

如果您在Kubernetes中運行,並且同一個pod中有多個容器,則可以使用 localhost 在它們之間進行通信。 在pod之間,您應該在每個pod / deployment之前設置一個服務,並使用 service-name.namespace-name.svc.cluster.local 形式的DNS名稱。





docker