gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 20:07:52 25 4
gpt4 key购买 nike

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

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com