无法连接到 Docker 中的 mongo



我正在练习Docker与一个虚拟的应用程序,但我不能与数据库连接。如果有谁能告诉我问题是什么,请告诉我。提前感谢任何帮助。如果需要更多的信息,请告诉我。

这是我的Dockerfile for api:

Dockerfile in server

FROM node:14-alpine
WORKDIR usr/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3400
CMD ["npm", "start"]

这是我在db.js中与db的连接

const mongoose = require('mongoose');
const uri = 'mongodb://mongo:27017/prueba-docker';
const connect = async () => {
try {
await mongoose.connect(uri, {});
console.log('conected to db');
} catch (err) {
console.log('error connecting to db', err);
}
};
module.exports = { connect };

这里是docker-compose

version: "3"
services:
prueba-react:
image: prueba-react
build: ./client/
stdin_open: true
ports: 
- "3000:3000"
networks: 
- mern-app

prueba-api:
image: prueba-api
build: ./server/
ports: 
- "3400:3400"
networks:
- mern-app
depends_on:
- db
db:
image: mongo:4.4-bionic
ports:
- "27017:27017"
networks:
- mern-app
volumes:
- mongo-data:/data/db
networks:
mern-app:
driver: bridge
volumes:
mongo-data:
driver: local

首先我发现我应该用命令停止mongo,因为我有一个端口冲突。

sudo systemctl stop mongod

但是现在我不明白为什么当我做docker-compose up

时它会给出一个错误这是我得到的错误

prueba-api_1    | error connecting to db MongooseServerSelectionError: getaddrinfo EAI_AGAIN mongo
prueba-api_1    |     at NativeConnection.Connection.openUri (/usr/app/node_modules/mongoose/lib/connection.js:796:32)
prueba-api_1    |     at /usr/app/node_modules/mongoose/lib/index.js:328:10
prueba-api_1    |     at /usr/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:32:5
prueba-api_1    |     at new Promise (<anonymous>)
prueba-api_1    |     at promiseOrCallback (/usr/app/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:10)
prueba-api_1    |     at Mongoose._promiseOrCallback (/usr/app/node_modules/mongoose/lib/index.js:1149:10)
prueba-api_1    |     at Mongoose.connect (/usr/app/node_modules/mongoose/lib/index.js:327:20)
prueba-api_1    |     at Object.connect (/usr/app/db.js:6:20)
prueba-api_1    |     at Object.<anonymous> (/usr/app/app.js:6:4)
prueba-api_1    |     at Module._compile (internal/modules/cjs/loader.js:1072:14) {
prueba-api_1    |   reason: TopologyDescription {
prueba-api_1    |     type: 'Unknown',
prueba-api_1    |     servers: Map(1) { 'mongo:27017' => [ServerDescription] },
prueba-api_1    |     stale: false,
prueba-api_1    |     compatible: true,
prueba-api_1    |     heartbeatFrequencyMS: 10000,
prueba-api_1    |     localThresholdMS: 15,
prueba-api_1    |     logicalSessionTimeoutMinutes: undefined
prueba-api_1    |   }

在您的docker-compose.yml中,您正在创建一个名为mern-appnetwork,其中所有services都分配给该network。要在docker network中的containers之间进行通信,您所要做的就是使用service名称。不连接mongodb://mongo:27017/prueba-docker,尝试连接mongodb://db:27017/prueba-docker

您还提到了端口冲突。看起来你已经在运行mongodb了。如果您不想每次尝试docker-compose时都停止mongodb,则可以映射到另一个端口:

ports:
- "27018:27017"

或者你可以不暴露你的mongodb,如果没有外部application正在使用你的db。这里只介绍security threats

最新更新