2

我想在容器中运行 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 服务器尝试与 建立 mongodb 连接localhost:27017,但无法建立连接。

有谁知道为什么会发生这种情况?我没有正确链接容器吗?

请注意,我可以从容器外部成功连接到 mongodb 容器,但不能从“foo”容器内的服务器。

4

1 回答 1

7

所以localhostfrom a container 总是(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 来解析容器的名称,从而引用您的数据库。请注意,如果您不打算从外部世界连接,则不需要公开端口,同一网络上的容器之间的互连不需要端口映射。

于 2017-05-02T23:59:12.430 回答