docker-compose链接如何工作?

时间:2016-05-05 12:52:18

标签: node.js mongodb docker docker-compose

我有三个容器,web,rest和db。我希望rest(nodejs)能够访问db(mongodb)。

我的docker-compose.yml:

version: '2'
services:
 web:
  build: front
  depends_on:
   - db
   - rest
 db:
  build: backend/mongodb
  volumes:
   - /src/docker/mongodb:/var/lib/mongodb
  restart: always
 rest:
  build: backend/rest
  restart: always
  links:
    - db:database

在我的nodejs程序中:

MongoClient.connect("mongodb://database:27017/mytest", function (err, db) {
 ...

但是,我的mongo客户端无法访问数据库并继续重启...

我做错了什么?

2 个答案:

答案 0 :(得分:0)

容器的名称可以访问。因此,在您的情况下,您必须使用db服务的名称,即db

MongoClient.connect("mongodb://db:27017/mytest", function (err, db) {

答案 1 :(得分:0)

假设您的node.js应用程序是您的web服务? Web只能使用主机名db访问db服务。但是,rest服务可以使用dbdatabase访问它,因为您已为其指定了链接别名。

您可以在links:服务定义中复制web别名,也可以将连接字符串更改为使用db而不是database

这应该现在可行:

MongoClient.connect("mongodb://db:27017/mytest", function (err, ndb) {

或者添加了链接:

MongoClient.connect("mongodb://database:27017/mytest", function (err, db) {