与其他docker容器连接本地系统mongodb数据库

时间:2018-01-31 10:17:01

标签: mongodb express docker mean-stack

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

  1. docker build -t nitikishu / sampledocker
  2. docker push nitikishu / sampledocker
  3. docker pull nitikishu / sampledocker
  4. docker run -p 4200:4200 nitikishu / sampledocker
  5. 现在Docker容器有samplesocker应用程序映像。服务器页面有 mongoose.connect(" mongodb:// mongo:27017 / dbname")

    从这个env文件中我将这个mongodb路径传递给server.js(app.js)

    我的项目结构是:

    1. 样品
      • node_modules
      • 公共
        • 控制器
        • samplecontroller.js
        • 的index.html
        • index1.html
      • dockerignore.txt
      • Dockerfile
      • env.Config
      • 搬运工-compose.yml
      • 的package.json
      • server.js
    2. 如何在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');
      });
      

1 个答案:

答案 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文件中定义环境变量等等。