簡體   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