【问题标题】:How to connect from one docker image to another docker image's port? [duplicate]如何从一个 docker 镜像连接到另一个 docker 镜像的端口? [复制]
【发布时间】:2021-08-05 20:26:39
【问题描述】:

我在Ubuntu 18.04.4 LTS (GNU/Linux 4.15.0-140-generic x86_64) 上运行Docker version 19.03.4。在里面我开始两张图片:

图片 1

我公开了以下端口:0.0.0.0:3333->3000/tcp(即 Grafana)。

图片 2

我公开了以下端口:0.0.0.0:8812->8812/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:9009->9009/tcp(即 QuestDB)。

我去 localhost:3333 (Grafana) 并尝试连接到 QuestDB (localhost:8812),但它不起作用。

当我回到我机器的终端并输入 telnet localhost 8812 时,一切正常。

您能帮我找出为什么通过一个 docker 映像我似乎无法找到另一个端口的原因吗?

FWIW:我还尝试创建一个 docker 网络,在其中将两个图像都添加到该网络,但这也不起作用。

【问题讨论】:

  • 链接的问题使用 docker network create 和 Compose 进入标准配方(并且使用过时的链接功能也有一个非常详细但过时的答案)。 localhost 几乎总是意味着“这个容器”,而不是主机或另一个容器。即使您不使用 Compose,Docker 文档中的 Networking in Compose 也是有用的背景阅读。

标签: docker localhost port grafana


【解决方案1】:

当您创建一个user-defined bridge network 并将每个容器连接到它时,由于有一个名为automatic service discovery 的服务,它们可以使用它们的容器名称来寻址。

因此,如果您有两个名为 grafanaquestdb 的容器,则可以从 grafana 内部使用其名称访问 questdb

# From grafana
ping -c 2 questdb

另外,这个话题在这个thread中有很大的讨论。

【讨论】:

  • 好的,但是我如何用 localhost 术语来定义它?因为在 Grafana 中,我需要指定 Host 才能建立连接;只是当我通过 Grafana UI 写localhost:8812 时,它没有连接。
  • 当您在容器内使用localhost 时,它不会针对您的本地计算机。相反,它以您所在的容器为目标。如果您希望localhost 指向您的本地计算机,您可以使用--network=host (Docker docs)。另外,请参阅 Thomasleveil 的 answer 了解更多信息。
  • 我建议使用如上所述的自定义网络。您仍然可以使用该网络的gateway 地址访问本地计算机。要找到它,您可以使用docker network inspect [network-name] 命令。 (Docs 用于网络检查)
猜你喜欢
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 2022-10-15
  • 1970-01-01
  • 2014-05-07
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多