【问题标题】:nodejs mongodb cant connect in docker.\nodejs mongodb 无法在 docker 中连接。\
【发布时间】:2021-02-09 15:50:15
【问题描述】:

图像构建和 dockerizing 工作正常,但 mongodb 连接不工作。没有 docker localhost 工作正常。 这是我的代码: 架构: clientSchema.js

const mongoose = require('mongoose');


const ClientData = mongoose.Schema({
    clientName: {
        type: String
    },
    companyName: {
        type: String
    },
    clientStatus: {
        type: String
    },
    project:[{
        clientName:{type:String},
        projectName: {type: String},
        proStatus:{type: String}
        }]   
})

module.exports = mongoose.model("ClientData",ClientData);

index.js

const express = require('express');
const app = express();
const mongoose = require('mongoose');
const userRouter = require('./router');
// const morgan = require('morgan');
const cors = require('cors');

app.use(cors());
app.use(express.json());
// app.use(morgan('development'));

app.listen(8000, () => {
    console.log("Server started at 8000");
})

app.use('/api', userRouter);

mongoose.connect("mongodb://localhost:27017/proj1",{useCreateIndex: true, 
                                                    useUnifiedTopology: true, 
                                                    useNewUrlParser: true },  () => {
    console.log("DB connected Sucessfully");
})

路由器.js

const router = require('express').Router();
const User = require('./userSchema');
const bcrypt = require('bcryptjs');
const jwt = require("jsonwebtoken");
const ClientData = require('./clientSchema');
router.post("/clientpostdata", async(req, res) => {
    try{
        var clientExist = await ClientData.findOne({clientName:req.body.clientName});
        if (clientExist){
            return res.status(400).json("Client already exists");

        }
        var clientdata = new ClientData({
            clientName: req.body.clientName,
            companyName: req.body.companyName,
            clientStatus: req.body.clientStatus,
    
    });
    var data = await clientdata.save();
    res.json(data);
}   catch(e){
    res.status(400).json(e)
}
});


router.get('/clientgetdata', async(req, res) => {
    var findData = await ClientData.find().select(['-__v']);
    res.json(findData)
    console.log(findData)

});

router.get('/clientgetdata/:id', async(req, res) => {
    var findData = await ClientData.find({_id:req.params.id}).select(['-__v']);
    res.json(findData)

});

router.delete("/clientdeldata/:id", async(req, res) => {
    var getData = await ClientData.deleteOne({ _id: req.params.id }).then(e => {
        res.json(e)
    })

})

router.put("/clientupddata/:id", async(req, res) => {

    var updData = await ClientData.update({ _id: req.params.id }, {
        $set: {
            clientName: req.body.clientName,
            companyName: req.body.companyName,
            clientStatus: req.body.clientStatus,
        }
    }).then(e => {
        var delData = ClientData.findOne({ _id: req.params.id }).then(e => {
            res.json(e)
        })
    }).catch(err => {
        console.log(err);
    })
})
module.exports = router;

Dockerfile:

FROM node:latest
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
COPY package*.json ./
COPY yarn.lock ./

RUN yarn install
# Copy app source code
COPY . .

#Expose port and start application
EXPOSE 8000
CMD [ "yarn", "start" ]

docker-compose.yml

版本:'3' 服务: 应用程序: 容器名称:docker-node-mongo 重启:总是 建造: 。 端口: - '8000:8000' 链接: - 蒙哥 蒙哥: 容器名称:mongo 图片:蒙哥 端口: - '27017:27017'

【问题讨论】:

  • 错误是什么?

标签: node.js mongodb docker


【解决方案1】:

对于 docker,您的链接应该是

mongoose.connect("mongodb://mongo:27017/proj1...

本地主机-> mongo

您在 docker-compose.yml 中使用了 mongo 的 links 属性。这将导致 web docker 容器的 /etc/hosts 中的主机名为 mongo。

【讨论】:

    猜你喜欢
    • 2015-12-31
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    相关资源
    最近更新 更多