我使用Docker版本1.9.1在Ubuntu 14.04服务器主机上构建a34a1d5,我有4个容器:redis(基于alpine linux 3.2),mongodb(基于alpine linux 3.2),postgres(基于ubuntu 14.04)和将运行连接到这些其他容器的应用程序(基于alpine linux 3.2)。所有db容器都在Dockerfile中公开它们相应的端口。
我对数据库容器进行了修改,因此他们的服务不会绑定到localhost IP,而是绑定到所有地址。这样我就可以从app容器连接到所有这些。 为了测试,我首先运行数据库容器,然后使用如下命令运行应用程序:
docker run --rm --name app_container --link mongodb_container --link redis_container --link postgres_container -t localhost:5000/app_image
我进入app容器的终端,并验证其/ etc / hosts文件是否包含其他容器的IP和名称。然后我能够ping所有数据库容器。但我无法连接到任何数据库容器的端口。
一个简单的:telnet mongodb_container 27017
只是坐着等待永远,如果我尝试连接到其他数据库容器,也会发生同样的情况。如果我运行该应用程序,它还会抱怨它无法连接到指定的数据库服务。
重要提示:我可以从主机远程登录所有数据库容器的相应端口。
可能会发生什么?
编辑:我将包含数据库容器的运行命令:
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 :(得分:1)
好吧,telnet的问题似乎与alpine linux上的telnet客户端有关,因为以下两个命令告诉我容器上的端口是打开的:
nmap -p27017 172.17.0.3
nc -vz 172.17.0.3 27017
主要关注我发布的telnet命令,我认为问题与端口关闭或其他问题有关;我忽略了应用程序上用于连接服务的配置文件(文件名错误),我的不好。
现在一切正常。