[英]How to access a port on the host machine when running docker container on MacOS with --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.