[英]mongoose couldn't connect to mongodb in docker
mongoose 無法使用 docker mongodb 容器進行身份驗證。 注意:mongo 在 docker 中,我的 API 應用程序在 docker 之外。
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:
MONGO_USERNAME=root
MONGO_PASSWORD=123456
MONGO_DB=nodeApp
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);
}
})();
我可以使用用戶名和密碼使用 mongoose 連接到 mongo。
Docker 僅支持使用默認環境變量,就像您在代碼中所做的那樣。
https://docs.docker.com/compose/env-file/
Docker 自 1.3 版起添加了對 env 文件的支持(我記得)。 解決方案是在 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
而不是 localhost 在數據庫配置上使用您的 ip 。
替換這個DBurl=mongodb://localhost:27017/
到數據庫配置文件中的這個DBurl=mongodb://XXXX:27017/
(XXXX 表示您的 ip 地址)。
在您的 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:
您在檢查員 docker -> 容器端口 -> (0.0.0.0:27017) 中看到
mongodb://0.0.0.0:27017/
;)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.