繁体   English   中英

使用其他Docker容器连接本地系统mongodb数据库

[英]connect with local system mongodb database with other docker container

我已经开发了样本meanstack应用程序(sampledocker)。 我想在docker中运行此应用程序。 我想将我的系统数据库( 我的系统IP地址:192.168.1.174 )连接到该docker应用程序中的Mongodb数据库。

  1. docker build -t nitikishu / sampledocker
  2. 泊坞窗推nitikishu / sampledocker
  3. docker pull nitikishu / sampledocker
  4. 泊坞窗运行-p 4200:4200 nitikishu / sampledocker

现在,Docker容器具有sampledocker应用程序映像。 服务器页面具有mongoose.connect(“ mongodb:// mongo:27017 / dbname”)

从这个环境文件中,我将此mongodb路径传递到server.js(app.js)

我的项目结构是:

  1. 样品
    • node_modules
    • 上市
      • 控制者
      • samplecontroller.js
      • index.html
      • index1.html
    • dockerignore.txt
    • Docker文件
    • env.Config
    • docker-compose.yml
    • package.json
    • server.js

如何在docker中将mongodb与sampledocker容器连接? 我想与sampledocker容器连接的数据库。

无法登录到应用程序

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” ]

docker-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');
});

您正在尝试使用.env文件来定义要在容器中使用的环境变量:

MONGODB_URI = mongodb://192.168.1.174:27017 / Sample_DB
SESSION_SECRET =样本
App_PORT = 4200

但是,这不是它的工作原理。 .env文件中的环境变量“用于Compose文件中的变量替换” ,而不是容器的环境。

随着文档继续说:

.env文件中定义的环境变量在容器内部不会自动显示。 要设置容器适用的环境变量,请遵循Compose中的环境变量主题中的指南,该指南描述了如何将Shell环境变量传递给容器,如何在Compose文件中定义环境变量,等等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM