当使用`--network host`模式运行时,为什么我无法从容器主机访问我的服务?

时间:2018-04-07 15:06:02

标签: macos docker prometheus

我有一个应用程序作为容器运行,其端点为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

我无法再从容器主机访问该服务。我在这里错过了一些小事吗?

1 个答案:

答案 0 :(得分:1)

如果您希望您的容器位于同一网络上并且能够相互通信,那么最佳选择是create a docker network,然后让它们加入同一网络。

所以你可以跑:

$ docker network create -d bridge [name]

然后,您可以将--network [name]传递给docker run命令,而不是--network host。您还需要--name,然后您可以使用它从同一网络上的其他容器与该容器进行通信:

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

现在,如果您要在新的自定义泊坞网络上创建另一个新容器,您可以使用其名称作为主机名与上述容器进行通信,即goexample:8080/metrics

因为我们仍然将golang-example的8080端口绑定到主机8080,所以你仍然可以从主机访问localhost:8080/metrics

但是,当您运行多个容器时,请记住无法将它们绑定到同一主机端口。同样,如果您在主机网络上运行所有容器,那么服务本身也不能全部使用8080,原因相同。在您的情况下可能是问题。