【问题标题】:mongoose couldn't connect to mongodb in dockermongoose 无法连接到 docker 中的 mongodb
【发布时间】:2021-04-06 16:12:36
【问题描述】:

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。

【问题讨论】:

  • 编辑/etc/mongod.confbindip以添加连接到mongo的IP地址。

标签: node.js mongodb docker mongoose


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在数据库配置中使用你的 ip 而不是 localhost。

    替换这个DBurl=mongodb://localhost:27017/

    到你的数据库配置文件中的DBurl=mongodb://X.X.X.X:27017/(X.X.X.X 表示你的 IP 地址)。

    在您的 docker-compose.yml 文件中

    • 在 api 的服务内部添加 CONNECTIONSTRING。
    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:
    
    

    【讨论】:

    • 如何获取我的 IP 地址?码头工人ps?你是说?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    • 2015-01-28
    • 2020-06-07
    • 2020-02-22
    • 2020-07-25
    • 2016-03-02
    相关资源
    最近更新 更多