【问题标题】:Docker container is unable to connect to port opened by another docker containerDocker 容器无法连接到另一个 Docker 容器打开的端口
【发布时间】:2016-08-01 17:17:38
【问题描述】:

我有两个容器正在运行:c1 和 c2。

C1 正在监听端口 2181 并且 C2 连接到 2181 端口

问题是 C2 无法在所述端口上连接到 C1,我不知道为什么。

当我在容器中运行连接到 C1 的代码时,它工作正常。所以我知道 C1 正在运行并且端口正确暴露。只是当我将应用程序放到它自己的容器中时,端口就不再可见了。

我在 C2 中尝试了 lsof,但它没有被列出,这对它失败的原因是有道理的。

任何关于我下一步需要看哪里的线索将不胜感激。

我使用的是 docker-compose,所以容器默认应该在同一个网络组中:

这是我的撰写文件:

version: '2'
services:
  c1:
    build: .
    volumes:
      - .:/code
    depends_on:
      - c2
  c2:
    image: jplock/zookeeper
    ports:
       - "2181:2181"
       - "2888:2888"
       - "3888:3888"

在 C1 中,发起者使用 URI localhost:2181

【问题讨论】:

  • 向我们展示您的代码?不是全部,但足以准确地重现问题。具体来说,您使用什么地址连接到第二个容器?
  • 啊,好点子,刚刚读到您应该使用撰写文件中列出的容器名称代替主机名。我仍在引用本地主机。我会试试看,然后告诉你。
  • 感谢 Larsks 你帮助我到达那里。

标签: networking docker docker-compose


【解决方案1】:

如果您看到这篇文章,这可能会有所帮助。

使用 docker-compose,容器会在 docker compose 文件中设置一个与服务别名匹配的主机名,请参阅此处的文档:

https://docs.docker.com/compose/networking/

修改后的引用以适应此用例

现在每个容器都可以查找主机名(即 c2)并取回相应容器的 IP 地址。例如,c1 应用程序代码可以连接到 URL //c2:2181。

【讨论】:

    猜你喜欢
    • 2020-01-30
    • 2019-09-04
    • 2022-01-04
    • 2016-01-29
    • 2019-02-24
    • 2020-10-18
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    相关资源
    最近更新 更多