簡體   English   中英

我無法使用 docker 組合將值插入 mongodb

[英]I can't insert values ​into mongodb using docker compose

我正在創建一個 Docker 文件。

FROM node:12
WORKDIR /home/node/

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8888

CMD [ "node", "server.js" ]

之后,創建一個 dockercompose.yml 文件。

version: '2'

services:
  api:
    container_name: api_node
    restart: always
    build: 
      dockerfile: ./Dockerfile
      context: .
    volumes:
      - .:/home/node
      - /home/node/node_modules
    ports:
      - 3000:3000
    command: node server.js

  mongo:
    container_name: mongo
    image: mongo
    volumes:
      - ./volumes/db:/data/db
    ports:
      - "27017:27017"      

運行 docker-compose 時,docker 創建容器,但我無法在 mongodb 中保存模式。 出現錯誤:

MongooseError:操作users.insertOne()緩沖在 10000 毫秒后超時

在超時。 (/home/node/node_modules/mongoose/lib/drivers/node-mongodb-native/collection.js:184:20)

在 listOnTimeout (internal/timers.js:554:17)

在 processTimers (internal/timers.js:497:7)

我的 server.js

// Constants
const PORT = 3000;

const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");

const app = express();

app.use(express.static("public"));

app.use(bodyParser.json());

mongoose.connect = ("mongodb://mongo:27017/userDB", { useNewUrlParser: true, useUnifiedTopology: true });

const userSchema = {
  username: String,
  email: String
};

const User = new mongoose.model("User", userSchema);

app.get("/", function (req, res) {
  res.render("home")
});

app.get("/register", function (req, res) {
  console.log('deu certo');
});

app.post("/register", function (req, res) {
  console.dir(req.body);
  const newUser = new User({
    username: req.body.username,
    email: req.body.email
  });
  console.log(newUser);
  newUser.save(function (err) {
    if (err) {
      console.log(err);
    } else {
      console.log('Deu certo');
    }
  });
});


app.listen(PORT, function () {
  console.log(`Running on http://localhost:${PORT}`);
});

我已經進行了一些更改,但我仍然不知道發生了什么。

您可以嘗試在docker-compose.yml中定義一個network ,以便服務在同一個網絡中並且可以相互訪問:

version: '2'

services:
  api:
    container_name: api_node
    restart: always
    build: 
      dockerfile: ./Dockerfile
      context: .
    volumes:
      - .:/home/node
      - /home/node/node_modules
    ports:
      - 3000:3000
    command: node server.js
    networks:
      - my-net

  mongo:
    container_name: mongo
    image: mongo
    volumes:
      - ./volumes/db:/data/db
    ports:
      - "27017:27017"
    networks:
      - my-net

networks:
  my-net:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM