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

'--link' does not seem to work to connect two Docker containers

我想 运行 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 连接,但未能建立连接。

有人知道为什么会这样吗?我没有正确链接容器吗?

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

因此来自容器的 localhost 总是(99.5% 的时间)引用 容器本身 。这也是 99.5% 的时间不是你想要的。如果你像这样使用 links,你需要将 localhost:27017 更改为 mongo:27017 因为这就是你 'mounting' 和 link as (--link cdt:mongo).

更好的选择是使用 Docker 网络而不是 link 网络(已弃用)。所以:

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