Macos 为什么可以';当以“--network host”模式运行时,我是否可以从容器主机访问我的服务?

Macos 为什么可以';当以“--network host”模式运行时,我是否可以从容器主机访问我的服务?,macos,docker,prometheus,Macos,Docker,Prometheus,我有一个作为容器运行的应用程序,其端点为 如果使用以下命令启动容器,我可以从容器主机访问服务: docker-run-p 8080:8080普罗米修斯/戈朗示例随机 但是,在同一台机器上的其他容器中,我的目标端点为localhost:8080,这不适用于此设置。因此,我尝试使用--网络主机运行。但是,当我使用此配置运行时: docker run——网络主机prometheus/golang示例random 我无法再从容器主机访问该服务。我是否遗漏了一些琐碎的东西?如果您希望您的容器位于同一个网络

我有一个作为容器运行的应用程序,其端点为

如果使用以下命令启动容器,我可以从容器主机访问服务:

docker-run-p 8080:8080普罗米修斯/戈朗示例随机

但是,在同一台机器上的其他容器中,我的目标端点为
localhost:8080
,这不适用于此设置。因此,我尝试使用
--网络主机运行。但是,当我使用此配置运行时:

docker run——网络主机prometheus/golang示例random


我无法再从容器主机访问该服务。我是否遗漏了一些琐碎的东西?

如果您希望您的容器位于同一个网络上并能够相互通信,最好的选择是为它们创建一个网络,然后让它们全部加入同一个网络

因此,您可以运行:

$ 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
现在,如果您要在新的定制docker网络上创建另一个新容器,那么您就可以使用上述容器的名称作为主机名,即
goexample:8080/metrics

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


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

您能否使用
-p8090:8080
将此映射到主机上的其他端口?不,问题不在于端口,而是一个容器中的
localhost
与另一个容器中的
localhost
不同。您是否希望访问localhost:8080上主机上的多个容器?