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

  • docker build -t nitikishu / sampledocker
  • docker push nitikishu / sampledocker
  • docker pull nitikishu / sampledocker
  • docker run -p 4200:4200 nitikishu / sampledocker

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

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

    我的项目结构是:
  • 样本
  • node_modules
  • 公共(public)
  • Controller
  • samplecontroller.js
  • index.html
  • index1.html
  • dockerignore.txt
  • Dockerfile
  • 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 file定义要在容器中使用的环境变量:



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

    随着文档继续说:

    08-28 09:39