我想在容器中运行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容器。容器
答案 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解析。请注意,如果您不打算从外部世界进行连接,则不需要公开端口,同一网络上的容器之间的互连不需要端口映射。