[英]mongoose couldn't connect to mongodb in docker
mongoose couldn't authenticate with docker mongodb container. mongoose 无法使用 docker mongodb 容器进行身份验证。 Note : mongo is in docker and my API app out of the docker.
注意:mongo 在 docker 中,我的 API 应用程序在 docker 之外。
docker-compose: docker-compose:
version: "3.7"
services:
db:
image: mongo:latest
environment:
MONGO_INITDB_ROOT_USERNAME: "${MONGO_USERNAME}"
MONGO_INITDB_ROOT_PASSWORD: "${MONGO_PASSWORD}"
MONGO_INITDB_DB: "${MONGO_DB}"
ports:
- 27017:27017
volumes:
- mongo_data:/data/db
volumes:
mongo_data:
.env: .env:
MONGO_USERNAME=root
MONGO_PASSWORD=123456
MONGO_DB=nodeApp
db.js (database connection file): db.js(数据库连接文件):
(async () => {
try {
const uri = `mongodb://127.0.0.1:27017/${process.env.MONGO_DB}`;
await mongoose.connect(uri, {
useNewUrlParser: true,
useUnifiedTopology: true,
useFindAndModify: false,
useCreateIndex: true,
user: process.env.MONGO_USERNAME,
pass: process.env.MONGO_PASSWORD,
});
console.log("Database connection completed successfully");
} catch (error) {
console.error(error);
}
})();
and finally this is what I got from console:最后这是我从控制台得到的:
I can connect to mongo with mongoose with username and password.我可以使用用户名和密码使用 mongoose 连接到 mongo。
Docker only supports using default environment variables to be used like what you did in your code. Docker 仅支持使用默认环境变量,就像您在代码中所做的那样。
https://docs.docker.com/compose/env-file/ https://docs.docker.com/compose/env-file/
Docker added support to env filed since version 1.3 (as I remember). Docker 自 1.3 版起添加了对 env 文件的支持(我记得)。 The soloution is to use
env_file
key in your yml file.解决方案是在 yml 文件中使用
env_file
键。
services:
db:
image: mongo:latest
environment:
MONGO_INITDB_ROOT_USERNAME: "${MONGO_USERNAME}"
MONGO_INITDB_ROOT_PASSWORD: "${MONGO_PASSWORD}"
MONGO_INITDB_DB: "${MONGO_DB}"
ports:
- 27017:27017
volumes:
- mongo_data:/data/db
env_file:
- mongo_variables.env
Instead of localhost use your ip on database configuration.而不是 localhost 在数据库配置上使用您的 ip 。
Replace this DBurl=mongodb://localhost:27017/
替换这个
DBurl=mongodb://localhost:27017/
to this one DBurl=mongodb://XXXX:27017/
( XXXX means your ip address )on your database configuration file.到数据库配置文件中的这个
DBurl=mongodb://XXXX:27017/
(XXXX 表示您的 ip 地址)。
On your docker-compose.yml file在您的 docker-compose.yml 文件上
version: "3.7"
services:
api:
build: node-server ## as i am using node
ports:
- 3000:3000
environment:
- CONNECTIONSTRING=mongodb://X.X.X.X:27017/ ##X.X.X.X means your ip address
db:
image: mongo:latest
environment:
MONGO_INITDB_ROOT_USERNAME: "${MONGO_USERNAME}"
MONGO_INITDB_ROOT_PASSWORD: "${MONGO_PASSWORD}"
MONGO_INITDB_DB: "${MONGO_DB}"
ports:
- 27017:27017
volumes:
- mongo_data:/data/db
volumes:
mongo_data:
you see that in the inspector docker -> port of your container -> (0.0.0.0:27017)您在检查员 docker -> 容器端口 -> (0.0.0.0:27017) 中看到
mongodb://0.0.0.0:27017/
;) ;)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.