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

标签 mongodb express docker mean-stack

我开发了示例 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")

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

    我的项目结构是:
  • 样本
  • 节点模块
  • 上市
  • Controller
  • 示例 Controller .js
  • index.html
  • index1.html
  • dockerignore.txt
  • Dockerfile
  • 环境配置
  • docker-compose.yml
  • 包.json
  • server.js

  • 如何将 mongodb 与 docker 中的 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定义在容器中使用的环境变量:

    MONGODB_URI=mongodb://192.168.1.174:27017/Sample_DB
    SESSION_SECRET=sample
    App_PORT = 4200



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

    正如文档继续说的:

    Environment variables defined in the .env file are not automatically visible inside containers. To set container-applicable environment variables, follow the guidelines in the topic Environment variables in Compose, which describes how to pass shell environment variables through to containers, define environment variables in Compose files, and more.

    关于mongodb - 使用其他 docker 容器连接本地系统 mongodb 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48539661/

    相关文章:

    node.js - express-ws如何定期检查自定义事件并自动采取行动

    docker - 无法在 Windows 10 Pro 上启动 docker?

    javascript - 如何在 mongodb 中查询对象数组

    node.js - 无法在express框架中使用.then

    javascript - Meteor 错误调用方法 ['questions.insert]: Method ' questions.insert' 未找到

    javascript - express - 错误 : Can't set headers after they are sent

    docker - docker 守护进程重新启动后,Docker 注册表中的所有存储库都会被删除 (docker-for-mac)

    java - Docker不会在指定的卷中创建文件

    node.js - 我想更新用户个人资料

    mongodb - 当我尝试调用 API 时,本地服务器返回 "http: panic serving [::1]:52781: runtime error: invalid memory address or nil pointer dereference"