【问题标题】:docker container port accessed from another container从另一个容器访问的 docker 容器端口
【发布时间】:2017-02-19 06:22:59
【问题描述】:

我有一个容器 1 在端口 1 上运行服务 1

还有

我有一个在端口 2 上运行服务 2 的容器 2

如何从 service1:port1 访问 service2:port2?

我提到容器是链接在一起的。

请问有没有办法在不访问docker0 IP(端口可见)的情况下做到这一点

谢谢

【问题讨论】:

  • 假设 service2 在 service1 之前运行,并且在 service1 启动时链接为“s2”,您应该能够在 service1 中调用 s2:
  • 嗨@zatta!实际上这是不可能的
  • 请问您使用什么命令运行 service1?
  • 服务 1 是 rabbitmq:5672 而 service2 是 php 试图连接到 rabbitmq
  • 所以我假设它们在同一台机器上,你说提供 IP 工作但不是链接名称'rabbitmq',因为你甚至启动 service2 为:docker ... --link rabbitmq:rabbitmq ... 。 正确的?我还假设 service1 运行为: docker --name rabbitmq ...

标签: docker mapping containers port


【解决方案1】:

首选的解决方案是将两个容器放在同一个网络上,使用内置的 dns 发现按名称到达另一个节点,您将能够通过容器端口访问它们,而不是主机发布的端口.通过 CLI,看起来像:

docker network create testnet
docker run -d --net testnet --name web nginx
docker run -it --rm --net testnet busybox wget -qO - http://web

busybox 显示了一个示例客户端容器,它通过端口 80 连接到名为 web 的 nginx 容器。请注意,此端口无需发布即可被其他容器访问。

使用自己的网络设置多容器环境是 docker-compose 的一项常见任务,因此如果您发现自己经常这样做,我建议您研究一下这个工具。

【讨论】:

  • 我可以从主机ip和发布的端口访问吗?
  • @FalconIA 会将一个可能仅限于内部的应用程序的端口暴露给更大的网络,甚至可能是互联网。它还通过有时会失败的发夹 NAT 反弹请求,将其置于主机 IP 表中,并且通常通过用户空间代理进行中继。所以不太理想,但可能会奏效。
猜你喜欢
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 2019-06-13
  • 2019-04-28
  • 2021-03-04
  • 2021-12-08
相关资源
最近更新 更多