使用docker时连接到mongodb
使用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组装电脑配置单推荐报价格
上传时间: 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 |