macos - 为什么在以 `--network host` 模式运行时无法从我的容器主机访问我的服务?

标签 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

我无法再从我的容器主机访问该服务。我在这里遗漏了一些微不足道的东西吗?

最佳答案

如果你想让你的容器在同一个网络上并且能够相互通信,最好的选择是 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

现在,如果您要在新的自定义 docker 网络上创建另一个新容器,您将能够使用其名称作为主机名与上述容器通信,即 goexample:8080/metrics .

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

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

关于macos - 为什么在以 `--network host` 模式运行时无法从我的容器主机访问我的服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49708714/

相关文章:

haproxy - 如何编写mesos和HAProxy进程的prometheus警报规则?

azure - 如何在 Azure AppInsights 中对自定义指标进行百分位数?

grafana - 如何在 ubuntu 中安装最新版本的 prometheus/promtool?

macos - WDL-OL:找不到资源

macos - 如何将行从 NSOutlineView 拖动到 NSTableview

docker - 无法使用 prometheus 收集 docker 指标

docker - 奇异的docker commit等效于什么?

c - 递增变量直到溢出的循环结构?

macos - Applescript 是否有类似于 PHP 的 "exit"或 "die"命令?

docker run...进入容器...然后每个命令都会得到 "ReferenceError: <command> is not defined"