是否可以从本地运行的外部nodejs应用程序连接到运行MongoDB镜像的docker容器?我尝试通过localhost:27017连接。这是我正在使用的docker compose文件:
version: '3'
services:
mongodb:
image: 'bitnami/mongodb:3.6.8'
ports:
- "27017:27017"
environment:
- MONGODB_ROOT_PASSWORD=$MONGODB_ROOT_PASSWORD
- MONGODB_USERNAME=$MONGODB_USERNAME
- MONGODB_PASSWORD=$MONGODB_PASSWORD
- MONGODB_DATABASE=$MONGODB_DATABASE
volumes:
- /data/db:/bitnami
我尝试使用以下网址连接它,但没有运气:
mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@localhost:27017
编辑:通过mongodb:// localhost:27017连接有效,但身份验证URL错误。我打印出了该字符串的结果,没有什么特别的错误。我验证了用户名和密码与docker容器中mongo内部的用户匹配。
app.listen(port, () => {
console.log(`Example app listening on port ${port}!`);
const url = (() => {
if(process.env.MONGODB_USERNAME && process.env.MONGODB_PASSWORD) {
return `mongodb://${process.env.MONGODB_USERNAME}:${process.env.MONGODB_PASSWORD}@localhost:27017/`;
}
console.log('could not find environment vars for mongodb');
})();
MongoClient.connect(url, (err, client) => {
if(err) {
console.log('DB connection error');
} else {
console.log("Connected successfully to server");
client.close();
}
});
});
最佳答案
如果外部nodejs应用程序也在Docker容器中运行,则需要链接容器。这是链接容器的docker run cmd的示例。我添加了环境变量以说明您将在容器内部使用什么主机名和端口。
docker run -d -it -e DEST_PORT=27017 -e DEST_HOST='mongodb' --link mongodb external-application:latest
关于node.js - 从外部应用程序连接到Docker中的MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52507216/