繁体   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