繁体   English   中英

如何让在 docker 下运行的 nodejs 服务器通过 mongoose 连接到 mongodb?

[英]How can I get a nodejs server running under docker get connected by mongoose to mongodb?

我正在努力尝试通过 mongoose 将我的 nodejs 服务器(在 docker 容器中运行)连接到 mongodb

server.js:

import * as express from 'express';
import { Request, Response } from 'express';
import { encode } from 'jwt-simple';
import * as bcrypt from 'bcrypt';
import { connect } from 'mongoose';
import { UserModel, User } from './models';

const app: express.Application = express();
const PORT = 3333;

app.use(express.json());

app.use((req, res, next) => {
  res.header("Access-Control-Allow-Origin", "*")
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept")
  next();
});

// some code here

connect(`mongodb://0.0.0.0:27017/user-db`, {
  useNewUrlParser: true,
  useUnifiedTopology: true
})
.then(() => {
  console.log('successfully connected to the database');
})
.catch(err => {
  console.log('error connecting to the database');
  process.exit();
});

app.listen(PORT, () => {
  console.log(`Server is listening at port - ${PORT}`);
});

然后我有两个图像,一个用于服务器,一个用于 mongodb,在运行 mongodb 图像后,我运行服务器一个,它得到服务(已经从.ts 编译)到 Z05B6053C41A2130AFDZ6FC3B158BDA4E6

1 docker run -it --name server -p 3333:3333 my:server sh

然后在“服务器”容器中运行:

2 node server.js

服务器路由工作正常,但几秒钟后mongoose.connect陷入困境

您有两个选项可以连接 Mongo DB 容器。

  • 主机 IP(运行 Mongo DB 容器的位置)
  • 同Docker网络

对于第一个选项,您可以将Host IP作为环境变量传递给您的 nodejs 容器,因为0.0.0.0表示 @David 提到的所有接口在这种情况下都不起作用。 进行以下更改

// set some default value if ENV is not set
const mongo_host=process.env.MONGO_HOST || "localhost"

connect(mongo_host, {
  useNewUrlParser: true,
  useUnifiedTopology: true
})

然后运行容器并通过Mongo Host IP

docker run -it -e MONGO_HOST=192.168.x.x --name server -p 3333:3333 my:server sh

或者如果主机是 Mac 或 window 你也使用特殊的 DNS host.docker.internal


connect('host.docker.internal', {
  useNewUrlParser: true,
  useUnifiedTopology: true
})
  • 第二个选项是Docker网络
version: "3"
services:
  app:
    container_name: nodejs-mongo
    image: nodejs_app
    environment:
      - MONGO_HOST=mongo
    ports:
      - "3000:3000"
    depends_on:
      - mongo
  mongo:
    container_name: mongo
    image: mongo
    ports:
      - "27017:27017"

在这种情况下,我们通过MONGO_HOST=mongo ,其中 docker 可以解决此问题,以便与同一网络中的 Mongo 容器连接。

docker-compose联网

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM