'–link'似乎不能连接两个Docker容器

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

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

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

所以从一个容器localhost总是(99.5%的时间)引用容器本身 。 这也是99.5%的时间不是你想要的。 如果你使用这样的links ,你需要将localhost:27017更改为mongo:27017因为这就是你将链接挂载为( --link cdt:mongo )的原因。

更好的select是使用Dockernetworking而不是链接(已弃用)。 所以:

 $ 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来引用你的数据库,因为容器的名字可以在同一个networking上通过DNSparsing。 请注意,如果不打算从外部连接,则不需要公开端口,同一networking上的容器之间的互连不需要端口映射。