' - 链接'似乎无法连接两个Docker容器

时间:2017-05-02 22:20:55

标签: mongodb docker docker-link

我想在容器中运行MongoDB,这有效:

docker run -p 27017:27017 --name cdt -d mongo

然后我想在另一个容器中运行服务器,如下所示:

docker run --name foo --link cdt:mongo exec /bin/bash -c "node server.js"

node.js服务器尝试与localhost:27017建立mongodb连接,但无法建立连接。

任何人都知道为什么会这样吗?我没有正确连接容器吗?

请注意,我可以从 outside 容器成功连接到mongodb容器,但不能从" foo"中的服务器连接到mongodb容器。容器

1 个答案:

答案 0 :(得分:5)

所以来自容器的localhost总是(99.5%的时间)将引用到容器本身。这也是99.5%的时间不是你想要的。如果你像这样使用links,则需要将localhost:27017更改为mongo:27017,因为您正在安装'链接为(--link cdt:mongo)。

更好的选择是使用Docker网络而不是链接(不推荐使用)。所以:

$ docker network create my-net
$ docker run --name cdt --net my-net -d mongo
$ docker run --name foo --net my-net exec /bin/bash -c "node server.js"

现在您通过cdt:27017引用您的数据库,因为容器的名称可以通过同一网络上的DNS解析。请注意,如果您不打算从外部世界进行连接,则不需要公开端口,同一网络上的容器之间的互连不需要端口映射。