簡體   English   中英

在以--network host模式運行時,為什么不能從容器主機訪問我的服務?

[英]Why can't I access my service from my container host when running with `--network host` mode?

我有一個應用程序作為容器運行,端點為http:// localhost:8080 / metrics

如果使用以下命令啟動容器,則可以從容器主機訪問該服務:

docker run -p 8080:8080 prometheus/golang-example-random

但是,在同一台計算機上的其他容器中,我具有localhost:8080目標端點,該端點不適用於此設置。 因此,我嘗試使用--network host運行。 但是,當我使用此配置運行時:

docker run --network host prometheus/golang-example-random

我無法再從容器主機訪問該服務。 我在這里錯過了一些瑣碎的事情嗎?

如果您希望容器位於同一網絡上並且能夠互相通信,最好的選擇是為它們創建一個docker網絡 ,然后將它們全部加入同一網絡。

這樣就可以運行:

$ docker network create -d bridge [name]

然后,您可以將--network [name]傳遞給--network [name] run命令,而不是--network host。 您還需要--name,然后便可以使用--name從同一網絡上的其他容器與該容器進行對話:

$ docker run --name goexample --network [name] -p 8080:8080 prometheus/golang-example-random

現在,如果您要在該新的自定義docker網絡上創建另一個新容器,則可以使用其名稱作為主機名與上述容器進行對話,即goexample:8080/metrics

由於我們仍將golang-example的8080端口綁定到主機的8080,因此您仍然可以從主機訪問localhost:8080/metrics

但是,當您運行多個容器時,請記住不能將它們綁定到同一主機端口 同樣,如果您在主機網絡上運行所有容器,則出於相同的原因,服務本身也不能全部使用8080。 在您的情況下,這很可能是問題所在。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM