您现在的位置是:首页 > 电脑 > 

使用docker时连接到mongodb

2025-07-19 16:48:05
使用docker时连接到mongodb 我正在学习用于项目的docker。但是,我在使用docker时无法理解如何使用环境变量。 这是我的mongo设置过程ct mongoose = require('mongoose'); ct Promise = require("bluebird"); ct mongodb = require('mongodb'); ct uuid

使用docker时连接到mongodb

我正在学习用于项目的docker。但是,我在使用docker时无法理解如何使用环境变量。

这是我的mongo设置过程

ct mongoose = require('mongoose');
ct Promise = require("bluebird");
ct mongodb = require('mongodb');
ct uuidv4 = require('uuid/v4');
ct MongoClient = mongodb.MongoClient;
ct utilityHelper = require('../helpers/utility');

ct {
  DATABASE_HOST,
  DATABASE_PORT,
  DATABASE_DBAME,
  DATABASE_DBUSER,
  DATABASE_DBPASS
} = require('../configs');

ct connectDb = () => {
  ct user = encodeURIComponent(DATABASE_DBUSER);
  ct password = encodeURIComponent(DATABASE_DBPASS);

  // Connection URL
  let dbUrl = `mongodb://${DATABASE_HOST}:${DATABASE_PORT}/${DATABASE_DBAME}`;
  let opti={
    useewUrlParser: true,
    useCreateIndex: true
  };
  if (user !== "undefined" && password !== "undefined") {
    opti.user = user;
    opti.pass = password;
    dbUrl = dbUrl + `?authSource=${DATABASE_DBAME}`;
  } 
  return (
    dbUrl,
    opti,
    (err, data) => {
      if (err) {
        (err.stack);
      } else {
        cole.log("Database is connected..")
      }
    }
  );
};

ct dbConnector = async (app) => {
  try {
    return new Promise((resolve, reject) => {
      ct user = encodeURIComponent(DATABASE_DBUSER);
      ct password = encodeURIComponent(DATABASE_DBPASS);

      // Connection URL
      let dbUrl="";
      if (user !== "undefined" && password !== "undefined") {
        dbUrl = `mongodb://${user}:${password}@${DATABASE_HOST}:${DATABASE_PORT}/?authSource=${DATABASE_DBAME}`
      } else {
        dbUrl = `mongodb://${DATABASE_HOST}:${DATABASE_PORT}`;
      }
      ct opti = {
          promiseLibrary: Promise,
          connectTimeoutMS: 60000,
          useewUrlParser: true,
          useUnifiedTopology: true,
      };

      ct client = new MongoClient(dbUrl, opti);

      (async(err, client) => {
        if(err) reject(err);
        ct db = client.db(DATABASE_DBAME);
        app.locals.db = db;
        if (RU_FIRST_TIME === 'true') await createUsersWithRoles(db);
        cole.log('database connection success');
        resolve(db);
      });
    })
  } catch(err) {
    throw new Error(err);
  }
}

ct createUsersWithRoles = async(db) => {
  ct adminRole = {
    _id: uuidv4(),
    name: 'Admin',
    code: 'A',
    createdAt: new Date(),
    updatedAt: new Date()
  };

  ct guideRole = {
    _id: uuidv4(),
    name: 'Guide',
    code: 'G',
    createdAt: new Date(),
    updatedAt: new Date()
  };

  ct user1 = {
    _id: uuidv4(),
    email: '[email protected]',
    firstame: "Admin",
    lastame: "Account",
    slug: 'admin-account',
    fullame: "Admin" + " " + "Account",
    password: await utilityHelper.hashPassword('Test@12'),
    gender: 'M',
    role: adminRole
  };

  await ('Role').insertMany([adminRole, guideRole, travellerRole]);
  await ('User').insertOne(user1);
};

 = { 
  connectDb,
  dbConnector
}

。env

DATABASE_HOST=localhost
DATABASE_PORT=27017
DATABASE_DBUSER=travel
DATABASE_DBPASS=travel12
DATABASE_DBAME=travel_db

Dockerfile

# Use a node.js image from Docker.
FROM node:12-alpine

# Create app directory, this is where our source code will live
WORKDIR /usr/src/app

RU apk update && apk upgrade && apk add --no-cache bash git python
# RU apt-get install -y build-essential python
RU npm install --global npm node-gyp

# We need to install our npm package in the container image
COPY package*.json ./

# now we will install the package
RU npm install

# copy your application source into a src folder
COPY ./src /usr/src/app/src
COPY pm2.json ./
COPY .env ./.env

EXPOSE 8000

CMD ["npm", "start"]

docker-compose.yml

version: ".7"

# Lets define all our services ( our containers to run)
services:
    # create a mongodb database
    travel-db:
        image: mongo
        container_name: "travel-db"
        volumes:
            - mongodb:/data/db/
        # opening mongodb port so that it can be connected from host
        ports:
            - "27017:27017"
    # create redis-server
    travel-redis-server:
        image: redis:latest
        container_name: "travel-redis-server"
        volumes:
            - redis:/data/
        ports:
            - "679:679"

    # express app
    travel-express-server:
        image: "travel-express-server"
        container_name: "travel-express-server"
        ports:
            - "8000:8000"

volumes:
    travel-db:
    travel-redis-server:

我想知道在使用docker完成mongodb设置后如何利用环境变量。我需要为docker提供单独的env变量吗?

回答如下:

将env变量包含在图像本身中并不是一个好习惯。它应该这样提供:

env_file:
        - ./.env

在您的docker-compose中。并从Dockerfile中删除相关的COPY命令。对于docker-compose中的不同服务所需的所有变量,只需保留一个.env即可。

此外,您将无法像这样访问localhost。您需要将DATABASE_HOST更改为travel-db,并对所有其他服务(如REDIS)执行相同的操作。

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/diannao/884746.html

相关标签:无
上传时间: 2024-05-07 12:17:13
留言与评论(共有 9 条评论)
本站网友 前门楼子九丈九
18分钟前 发表
DATABASE_PORT
本站网友 佛大
26分钟前 发表
code
本站网友 早期孕妇食谱大全
24分钟前 发表
"travel-express-server" ports
本站网友 成都512建材市场
22分钟前 发表
60000
本站网友 骨傲天
10分钟前 发表
- ./.env 在您的docker-compose中
本站网友 富丰园小区
16分钟前 发表
name
本站网友 卸妆水怎么用
3分钟前 发表
"travel-express-server" container_name
本站网友 底儿掉
0秒前 发表
createdAt