Docker를 사용하는 MongoDB "첫 번째 연결 시 서버 [localhost:27017]에 연결하지 못했습니다."
및 NodeJS 백엔드에서 mongoDB를 사용하고 있습니다.문제는 다음 오류가 발생한다는 것입니다.
노드:16) 처리되지 않은 약속거부 경고: MongoNetworkError: 첫 번째 연결 시 [localhost:27017] 서버에 연결하지 못했습니다 [MongoNetworkError: connectECONFUSED 127.0.0.1:27017]
이것은 제 도커 작품입니다.
version: '3.4'
services:
db:
image: mongo:latest
ports:
- '27017:27017'
rest-api-node:
build: .
ports:
- '5000:5000'
links:
- db
restart: on-failure
와 해본 적이 있습니다.depends_on
또한, 는 작동하지 않았습니다.
백엔드에서 나는 DB와 통신하기 위한 미들웨어로서 mongoose입니다. 이것이 나의 부분입니다.index.js
mongoose.Promise = global.Promise
mongoose.connect('mongodb://localhost/demo')
app.listen(port, () => console.log("live"))
저도 약속을 사용해봤지만, 변경은 없었습니다.저 좀 도와주세요.잘 부탁드립니다.
전체 오류 로그
pool.(/app/node_modules/mongodb-core/lib/topologies/server.js:505:11) rest-api-node_1 | at Pool.emit(이벤트.js:180:13) rest-api-node_1 | connection.(/app/node_modules/mongodb-core/lib/connection/pool.js:329:12) rest-api-node_1 | at Object.onceWrapper(이벤트.js:272:13) rest-api-node_1 | at Connection.emit(이벤트.js:180:13) rest-api-node_1 | api-node_1 | api-node/node.js(연결 객체:24.js.5.1) rest-node.js:272:13) rest-api-node_1 | at Socket.emit (event.js:180:13) rest-api-node_1 | at emitErrorNT(internal/streams/destroy.js:64:8) rest-api-node_1 | 프로세스 중입니다._tickCallback (internal/process/next_tick.js:178:19) rest-api-node_1 | 이름: 'MongoNetworkError', rest-api-node_1 |
메시지: '처음 연결할 때 [MongoNetworkError: connect ECONFUSED 127.0.0.1:27017] 서버에 연결하지 못했습니다.' }
기본적으로 작성은 앱에 대한 단일 네트워크를 설정합니다.서비스의 각 컨테이너는 기본 네트워크에 가입하고 해당 네트워크의 다른 컨테이너에서 모두 연결할 수 있으며 컨테이너 이름과 동일한 호스트 이름으로 검색할 수 있습니다.
당신의 말에 따르면docker-compose.yaml
mongo 컨테이너에 액세스할 수 있는 파일:127.0.0.1:27017
호스트 시스템에서만 사용할 수 있습니다.NodeJS 백엔드 컨테이너에서 액세스하려면 사용해야 합니다.db:27017
.
저도 같은 문제가 있습니다. 다른 솔루션은 저에게 적합하지 않습니다. 하지만 저는 이런 식으로 했습니다.
참고:
의 경우 mongo를 .URI의 경우 MongoDB를 사용해야 합니다.service name
에 신대127.0.0.1
또는localhost
아래 , 도커버-깅파서일에이 my mongo 서비은름입니다.mongodb-myapp
합니다.mongodb://mongodb-myapp:27017/myapp
그리고 그것은 나에게 효과가 있습니다.
services:
boilerplate-api-app:
build: .
environment:
- MONGO_URI=mongodb://mongodb-myapp:27017/myapp
volumes:
- .:/app
ports:
- "5000:5000"
depends_on:
- mongodb-myapp
mongodb-myapp:
image: mongo
ports:
- "27017:27017"
저도 몇 시간 동안 이것에 갇혀 있었어요! 정db:27017
및 연문열및자에서restart: always
에서.rest-api-node
올바른 IP에 연결하고 노드 서버가 계속해서 DB에 연결을 시도하는지 확인합니다.나한테 효과가 있었어요!
도커식의얌
version: "3"
services:
node-app:
build: .
ports:
- "3000:3000"
environment:
- PORT=3000
mongo:
image: mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=imran
- MONGO_INITDB_ROOT_PASSWORD=test_password
volumes:
- mongo-db:/data/db
volumes:
mongo-db:
위의 코드는 도커 컴포지트입니다.yaml 파일과 MongoDB의 서비스 이름은 'mongo'입니다.컨테이너의 IP 주소를 수동으로 삽입할 필요가 없습니다.대신 MongoDB URI에 다음 샘플 코드와 같이 서비스 이름을 삽입합니다.
const express = require("express");
const mongoose = require("mongoose");
const app = express();
mongoose
.connect("mongodb://imran:test_password@mongo:27017/?authSource=admin")
.then(() => {
console.log("Successfully connected to the DB");
})
.catch((e) => {
console.log(e);
});
const port = process.env.PORT || 3000;
// routes
app.get("/", (req, res) => {
res.send("<h1>Running on Container!</h1>");
});
app.listen(port, () => console.log(`listening on port ${port}`));
MongoDB가 다른 자격 증명을 사용하여 포트 27017에서 이미(도커가 아닌 로컬에서) 실행되고 있으며 이는 도커에서 실행되는 데이터베이스보다 우선했기 때문에 이 문제가 발생했습니다.
이러한 경우 솔루션이 로컬 MongoDB를 죽이거나 포트를 변경하는 것입니다.
ports:
- "27018:27017"
언급URL : https://stackoverflow.com/questions/51011552/mongodb-on-with-docker-failed-to-connect-to-server-localhost27017-on-first-c
'programing' 카테고리의 다른 글
ANSIC에서 복합 문(블록)이 부모 표현식으로 둘러싸여 있습니까? (0) | 2023.07.05 |
---|---|
여기서 count(col) > (0) | 2023.07.05 |
신뢰할 수 있는 Excel 범위 구문 참조 (0) | 2023.07.05 |
Python에서 문자열 형식 지정에 여러 인수 사용(예: '%s... %s') (0) | 2023.07.05 |
파이썬의 "내부 예외"(트레이스백 포함)? (0) | 2023.07.05 |