簡體   English   中英

mongoose 無法連接到 docker 中的 mongodb

[英]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 文件上

  • 在 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:

您在檢查員 docker -> 容器端口 -> (0.0.0.0:27017) 中看到

mongodb://0.0.0.0:27017/

;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM