docker-compose 无法连接到我本地的 mongodb
docker-compose cant connect to my local momgodb
我一直在搜索类似的问题,并试图找到适合我的解决方案;不幸的是,它仍然无法正常工作。似乎所有必要的事情都已经完成了。
好的,我的问题是,我的 AngularCLI 应用 'aied' 访问名为 'mockup' 的本地 MongoDB。 docker-compose.yml如下,
version: '3' # specify docker-compose version
# Define the services/containers to be run
services:
aied: #name of the second service
build: .
environment:
- MONGO_URI=mongodb://db:27017/mockup
volumes:
- .:/usr/src/app
ports:
- "3000:3000" #specify ports forewarding
depends_on:
- db
links:
- db
db:
image: mongo
environment:
- MONGODB_USER=username
- MONGODB_PASS=admin
- MONGO_INITDB_DATABASE=mockup
- MONGO_DATA_DIR=/data/db
ports:
- "27017:27017"
volumes:
- ./data/db:/data/db
command: mongod --smallfiles --logpath=/dev/null # --quiet
volumes:
db:
server.js部分如下
//const db = "mongodb://user:pass@ds247347.mlab.com:47347/mockup";
const db= "mongodb://db:27017/mockup";
mongoose.Promise = global.Promise;
mongoose.connect(db, function(err){
if(err){
console.error("can not receive data from mongodb ... " );
console.error("Error! " + err);
} else { console.log("... connected to "+db.toString());}
});
router.get('/models', function(req, res){
console.log('Get request for all models');
mdl.find({})
.exec(function(err, mdls){
if (err){
console.log("Error retrieving models");
}else {
res.json(mdls);
}
console.log('mdls length: ' + mdls.length);
});
});
经过"docker-compose up",我得到了以下,
Attaching to mockup_db_1, mockup_aied_1
aied_1 |
aied_1 | > mock-up@0.0.0 start /usr/src/app
aied_1 | > node server
aied_1 |
aied_1 | (node:15) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client
aied_1 | Server running on localhost:3000
aied_1 | ... connected to mongodb://db:27017/mockup
aied_1 | Get request for all models
aied_1 | mdls length: 0
问题是,docker-compose 在 mLab 上与我的远程 MongoDB 一起工作正常,只是无法通过我的本地 MongoDB 访问。
首先,我使用"docker ps"检查运行个容器,例如
bdcebd0b0e0b mockup_aied
"npm start" About an hour ago Up 17 seconds
0.0.0.0:3000->3000/tcp mockup_aied_1
583f719d9f4a mongo
"docker-entrypoint.s…" About an hour ago Up 18 seconds
0.0.0.0:27017->27017/tcp mockup_db_1
其次,通过使用“docker exec -it mockup_db_1 mongo”,我进入 mongo shell、
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> use mockup
switched to db mockup
> show collections
> db.collection.count()
0
问题很明显,运行 mongodb 容器中没有添加任何集合(数据)。
有人能帮帮我吗?非常感谢。
是的,在朋友的帮助下,终于解决了。
变化是:
- 为 mongo 使用另一个端口,例如 27027;
- mongo从本地 27017 端口导出我的数据
- mongo恢复删除端口 27027 的数据
然后就可以了。
我一直在搜索类似的问题,并试图找到适合我的解决方案;不幸的是,它仍然无法正常工作。似乎所有必要的事情都已经完成了。
好的,我的问题是,我的 AngularCLI 应用 'aied' 访问名为 'mockup' 的本地 MongoDB。 docker-compose.yml如下,
version: '3' # specify docker-compose version
# Define the services/containers to be run
services:
aied: #name of the second service
build: .
environment:
- MONGO_URI=mongodb://db:27017/mockup
volumes:
- .:/usr/src/app
ports:
- "3000:3000" #specify ports forewarding
depends_on:
- db
links:
- db
db:
image: mongo
environment:
- MONGODB_USER=username
- MONGODB_PASS=admin
- MONGO_INITDB_DATABASE=mockup
- MONGO_DATA_DIR=/data/db
ports:
- "27017:27017"
volumes:
- ./data/db:/data/db
command: mongod --smallfiles --logpath=/dev/null # --quiet
volumes:
db:
server.js部分如下
//const db = "mongodb://user:pass@ds247347.mlab.com:47347/mockup";
const db= "mongodb://db:27017/mockup";
mongoose.Promise = global.Promise;
mongoose.connect(db, function(err){
if(err){
console.error("can not receive data from mongodb ... " );
console.error("Error! " + err);
} else { console.log("... connected to "+db.toString());}
});
router.get('/models', function(req, res){
console.log('Get request for all models');
mdl.find({})
.exec(function(err, mdls){
if (err){
console.log("Error retrieving models");
}else {
res.json(mdls);
}
console.log('mdls length: ' + mdls.length);
});
});
经过"docker-compose up",我得到了以下,
Attaching to mockup_db_1, mockup_aied_1
aied_1 |
aied_1 | > mock-up@0.0.0 start /usr/src/app
aied_1 | > node server
aied_1 |
aied_1 | (node:15) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0, use `openUri()` instead, or set the `useMongoClient` option if using `connect()` or `createConnection()`. See http://mongoosejs.com/docs/connections.html#use-mongo-client
aied_1 | Server running on localhost:3000
aied_1 | ... connected to mongodb://db:27017/mockup
aied_1 | Get request for all models
aied_1 | mdls length: 0
问题是,docker-compose 在 mLab 上与我的远程 MongoDB 一起工作正常,只是无法通过我的本地 MongoDB 访问。
首先,我使用"docker ps"检查运行个容器,例如
bdcebd0b0e0b mockup_aied
"npm start" About an hour ago Up 17 seconds
0.0.0.0:3000->3000/tcp mockup_aied_1
583f719d9f4a mongo
"docker-entrypoint.s…" About an hour ago Up 18 seconds
0.0.0.0:27017->27017/tcp mockup_db_1
其次,通过使用“docker exec -it mockup_db_1 mongo”,我进入 mongo shell、
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
> use mockup
switched to db mockup
> show collections
> db.collection.count()
0
问题很明显,运行 mongodb 容器中没有添加任何集合(数据)。
有人能帮帮我吗?非常感谢。
是的,在朋友的帮助下,终于解决了。 变化是: - 为 mongo 使用另一个端口,例如 27027; - mongo从本地 27017 端口导出我的数据 - mongo恢复删除端口 27027 的数据
然后就可以了。