我开发了样本meanstack应用程序(sampledocker)。我想在docker中运行此应用程序。我想将我的系统数据库(我的系统IP地址:192.168.1.174 )Mongodb数据库连接到该docker应用程序。
现在Docker容器有samplesocker应用程序映像。服务器页面有 mongoose.connect(" mongodb:// mongo:27017 / dbname")
从这个env文件中我将这个mongodb路径传递给server.js(app.js)
我的项目结构是:
如何在docker中连接mongodb和samplesocker容器? 这个db我想用samplesocker容器连接。
无法登录该应用
Dockerfile:
FROM node:latest
RUN mkdir -p C:\Users\user2\Sample
WORKDIR C:\Users\user2\Sample
COPY package.json C:\Users\user2\Sample
RUN npm install
COPY . .
EXPOSE 4200
CMD [ “npm”, “start” ]
搬运工-compose.file
version : '3'
services :
sampledocker:
build: .
ports:
- "4200:4200"
depends_on:
- mongo
mongo:
image: mongo:3.4.2
ports:
- "27017:27017"
volumes:
- data:/data/db
volumes:
data:
server.js(main.js)
var express = require('express');
var session = require('express-session');
const bodyParser = require('body-parser');
const logger = require('morgan');
const chalk = require('chalk');
const errorHandler = require('errorhandler');
const dotenv = require('dotenv');
const path = require('path');
const mongoose = require('mongoose');
const MongoStore = require('connect-mongo')(session);
const passport = require('passport');
const expressValidator = require('express-validator');
var app = express();
var multer = require('multer');
var request = require('request');
var fs = require('fs');
dotenv.load({ path: '.env.Config' });
app.use(express.static(__dirname + "/public"));
app.set('views', __dirname + '\\public');
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
app.use(bodyParser.json());
mongoose.connect("mongodb://mongo:27017/dbname");
mongoose.connection.on('error', () =>
{
console.log(error);
process.exit();
});
app.use(session({
resave: true,
saveUninitialized: true,
secret: process.env.SESSION_SECRET,
store: new MongoStore({
url:"mongodb://mongo:27017/dbname",
autoReconnect: true
})
}));
app.set('port', process.env.App_PORT || 3000);
app.listen(app.get('port'), () => {
console.log('%s server running on port', chalk.green('✓'), app.get('port'));
console.log(' Press CTRL-C to stop\n');
});
答案 0 :(得分:0)
您正在尝试使用.env file来定义要在容器中使用的环境变量:
MONGODB_URI = mongodb的://192.168.1.174:27017 / Sample_DB
SESSION_SECRET =样品
App_PORT = 4200
但是,这不是它的工作原理。 .env文件中的环境变量“用于Compose文件中的变量替换”,而不是容器的环境。
随着文档继续说:
.env文件中定义的环境变量在容器内不会自动显示。要设置容器适用的环境变量,请遵循主题Environment variables in Compose中的准则,该准则描述了如何将shell环境变量传递到容器,在Compose文件中定义环境变量等等。