node.js - mongoose 无法连接到 docker 中的 mongodb
问题描述
mongoose 无法使用 docker mongodb 容器进行身份验证。 注意:mongo 在 docker 中,而我的 API 应用程序在 docker 之外。
码头工人撰写:
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 文件的支持(我记得)。env_file
解决方案是在您的 yml 文件中使用 密钥。
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
推荐阅读
- import - 有什么方法可以在不使用 graphql-compose 的情况下将 .js 文件中的常量导入 .graphql 文件?
- ruby-on-rails - 如何使用 ajax 调用带有 link_to 按钮的不同范围?
- android - 在 Android 中使用 powerapps 启动特定的外部应用程序
- javascript - 如何从 react-d3-tree 调用节点的 onclick 组件
- javascript - 错误:尝试分配给 const 或只读变量,替换为 let
- css - 我可以在显示后禁用过渡吗?
- vba - 从文件夹打印 PDF 正在打开 Acrobat Reader 但未发送到打印机
- .net - 用户代理的服务器端欺骗
- javascript - TypeError:解析模块说明符时出错
- openstreetmap - 按路线类型提取 Open Street Map 方式 ID 的交叉口计数