首页 > 解决方案 > 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。

标签: node.jsmongodbdockermongoose

解决方案


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

推荐阅读