我有三个容器,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客户端无法访问数据库并继续重启...
我做错了什么?
答案 0 :(得分:0)
容器的名称可以访问。因此,在您的情况下,您必须使用db
服务的名称,即db
:
MongoClient.connect("mongodb://db:27017/mytest", function (err, db) {
答案 1 :(得分:0)
假设您的node.js应用程序是您的web
服务? Web只能使用主机名db
访问db
服务。但是,rest
服务可以使用db
或database
访问它,因为您已为其指定了链接别名。
您可以在links:
服务定义中复制web
别名,也可以将连接字符串更改为使用db
而不是database
。
这应该现在可行:
MongoClient.connect("mongodb://db:27017/mytest", function (err, ndb) {
或者添加了链接:
MongoClient.connect("mongodb://database:27017/mytest", function (err, db) {