2016-02-11 99 views
1

我使用泊坞版本1.9.1构建a34a1d5一个Ubuntu 14.04服务器主机上,我有4个容器:Redis的(基于Linux的高山3.2),MongoDB的(基于Linux的高山3.2 ),postgres(基于Ubuntu 14.04)以及运行连接到这些其他容器的应用程序(基于alpine linux 3.2)的应用程序。所有的db容器都在Dockerfile中公开它们相应的端口。泊坞窗容器无法连接到链接集装箱服务

我做的数据库容器的修改,所以他们的服务不绑定到本地主机的IP,但所有地址。这样我就可以从应用程序容器连接到它们的全部。 为了测试起见,我第一次运行数据库容器中,然后该应用一个与像的命令以下:

docker run --rm --name app_container --link mongodb_container --link redis_container --link postgres_container -t localhost:5000/app_image 

我输入应用容器的终端和我确认其/ etc/hosts文件包含其他容器的IP和名称。然后我可以ping所有的db容器。但我无法连接到他们的任何数据库容器的端口。

简单:telnet mongodb_container 27017只是坐着永远等待,如果我尝试连接到其他分贝容器同样的情况。如果我运行该应用程序,它也会抱怨它无法连接到指定的数据库服务。

重要说明:我可以从主机telnet所有db容器的相应端口。

可能发生了什么?

编辑:我会包括为DB容器运行命令:

docker run --rm --name mongodb_container -t localhost:5000/mongodb_image 
docker run --rm --name redis_container -t localhost:5000/redis_image 
docker run --rm --name postgres_container -t localhost:5000/postgres_image 
+0

您可以包括所有这些其他容器中运行命令?你公开了正确的端口并使用'-p port:port'标志吗? –

+0

尝试使用'nslookup mongodb_container'或'ping mongedb_container'来查看它是否解析IP。 '--link'参数应该在你的容器中的主机文件中写入一个条目,使它们能够解析。 只是为了完整性......你可以运行在这样的容器外壳: '泊坞窗EXEC - 它 /斌/ bash' –

+0

@ cricket_007,当然,我增加了运行命令和我,而我是测试,我停止了mongo容器,然后在其运行命令中添加了“-p 27017:27017”,但它仍然无法连接。在仔细检查了Dockerfiles之后,我公开了正确的端口。 –

回答

1

好了,通过telnet这个问题似乎因为以下两个命令显示出可能与高山的Linux Telnet客户端我说,容器上的端口是开放的:

nmap -p27017 172.17.0.3 
nc -vz 172.17.0.3 27017 

正在主要集中在我发出telnet命令,我认为这个问题是关系到被关闭的端口或东西;我忽略了应用程序中用来连接服务的配置文件(这是错误的文件名),我的错误。

现在一切工作正常。

相关问题