2016-08-01 140 views
0

我有两个集装箱正在运行:c1和c2。码头集装箱无法连接到另一个码头集装箱打开的端口

C1正在侦听端口2181和 C2被连接到端口2181

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

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

我已经尝试了C2内的lsof,它没有列出,这对于它失败的原因很有意义。

任何线索我需要看下一个将不胜感激。

我用的是码头工人,组成这样的容器应该是相同的网络组默认情况下:

下面是我撰写的文件:

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

在C1,发起者是使用URI本地主机: 2181

+1

向我们展示您的代码?不是全部,但足以准确地重现问题。具体来说,你用什么地址连接到第二个容器? – larsks

+0

啊,说说你应该使用compose文件中列出的容器名来代替主机名。我仍然参考localhost。我会尝试一下,并会让你知道。 – JamesC

+0

谢谢拉尔斯克你帮我到那里。 – JamesC

回答

1

如果你遇到这个帖子,这可能会有所帮助。

使用泊坞窗,撰写,容器获取设置主机名匹配泊坞窗撰写文件中的服务别名,请参阅文档在这里:

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

修改报价,以适应这个用例

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