【问题标题】:connect with local system mongodb database with other docker container使用其他 docker 容器连接本地系统 mongodb 数据库
【发布时间】:2018-07-10 09:57:59
【问题描述】:

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

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

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

我的项目结构是:

  1. 样品
    • node_modules
    • 公开
      • 控制器
      • samplecontroller.js
      • index.html
      • index1.html
    • dockerignore.txt
    • Dockerfile
    • 环境配置
    • docker-compose.yml
    • package.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');
});

【问题讨论】:

  • 你好 N15;目前尚不清楚出了什么问题,因为您没有向我们展示您的应用程序是如何失败的。例如,它会产生错误吗?
  • 我在登录时无法使用应用程序用户名和密码访问应用程序。当我点击登录按钮时,它应该连接我的系统数据库以验证 sampledb 中的用户名密码。如果成功,它应该重定向到下一页。我没有收到任何错误。页面也没有重定向。数据库连接有问题吗?

标签: mongodb express docker mean-stack


【解决方案1】:

您正在尝试使用.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 文件中定义环境变量等等。

【讨论】:

  • 你的权利。我在 docker-compose 文件中使用了 mongo 容器。 mongodb://mongo:27017/dbname。然后也无法登录。我正在使用 Windows 8。我的 docker 在虚拟机上运行。是否可以在windows os上连接并运行mongodb
猜你喜欢
  • 2022-07-21
  • 2021-05-22
  • 2017-10-03
  • 2018-01-11
  • 1970-01-01
  • 2022-11-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多