当前位置: 首页 > 知识库问答 >
问题:

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

万涵亮
2023-03-14

我已经开发了样例的意思栈应用程序,我想在docker中运行这个应用程序,我想把我的系统数据库(我的系统IP地址:192.168.1.174)连接到那个docker应用程序中。

  1. docker build-t nitikishu/samendocker
  2. docker推送nitikishu/samendocker
  3. docker拉nitikishu/samendocker
  4. docker run-p 4200:4200 nitikishu/samendocker

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

从这个env文件中,我将这个mongodb路径传递到服务器。js(应用程序js)

我的项目结构是:

  • 样品

如何将mongodb与docker中的sampledocker容器连接?我想用sampledocker容器连接这个db。

无法登录到应用程序

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编写。文件

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:

服务器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个答案

万俟渊
2023-03-14

您正在尝试使用. env文件来定义在容器中使用的环境变量:

MONGODB\u URI=mongodb://192.168.1.174:27017/Sample_DB
SESSION\u SECRET=示例应用程序端口=4200

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

正如文档继续说:

中定义的环境变量。env文件在容器内不会自动可见。要设置适用于容器的环境变量,请遵循主题“Compose中的环境变量”中的指导原则,该主题描述了如何将shell环境变量传递给容器、在Compose文件中定义环境变量等。

 类似资料:
  • 我正在处理dockerize我的本地服务器,在那里有数据库,应用程序服务器和所有额外的配置来部署我的应用程序。目前,我已经创建了3个docker容器,运行像Tomcat或WildFly这样的应用程序服务器,并公开了部署的应用程序的端口,这些端口Java并从/读写数据。到我本地的数据库。在每个应用程序的文件中,我已经通过在我的实际配置中配置了访问权限,没有docker也可以。 我想将容器上的应用程序

  • 我已经创建了一个mongodb副本集在3虚拟机,manasger1,worker1,worker2.副本集工作正常,我可以登录到服务器: 当我运行nodejs应用程序时,它会连接到副本集。问题是,当我为我的应用程序创建一个容器时,我遇到以下异常,我的容器停止运行,我不能再连接到副本集主副本集,而是连接到次副本集。 我用猫鼬打开了一张发行票据寻求帮助,但他们的解决方案不起作用(他们要求我从ip地址更

  • 问题内容: 我最近一直在研究Docker和QGIS,并按照本教程中的说明安装了一个容器。 尽管我无法连接到包含我的所有GIS数据的localhost postgres数据库,但一切工作都很好。我认为这是因为我的postgres数据库未配置为接受远程连接,并且已经按照本文中的说明编辑了postgres conf文件以允许远程连接。 尝试连接到在Docker中运行QGIS的数据库时,我仍然收到错误消息

  • 我最近一直在玩Docker和QGIS,并按照本教程中的说明安装了一个容器。 我运行的是Ubuntu 14.04;Postgres 9.3

  • 我的数据库连接是用下面的类处理的: 这是我的spring boot控制器 下面是我的dockerfile: 我读了这里和这里提到的解决方案。也阅读了一些教程,但我无法将这些解决方案中的任何一个适合我的代码。在我的代码中,我应该在哪里更改?

  • 我试图在我本地的电脑上使用kafka(Windows10)作为生产者,在docker容器(ubuntu)上使用spark流作为消费者。我的示例在容器中一起工作,但我需要在本地计算机上创建流。 在容器的另一边,我正在监听端口2181来接收流。 我希望你能帮助我。谢了。