programing

도커 컨테이너에서 로컬 mongodb에 연결

closeapi 2023. 5. 21. 11:29
반응형

도커 컨테이너에서 로컬 mongodb에 연결

mongodb://127.0.0.1:27017에서 로컬 mongoDB 서버를 실행하고 있습니다.제 DB 이름은 localv2입니다.다음과 같은 도커 파일이 있는 노드/익스프레스 앱이 있습니다.

FROM node:7.5

RUN npm install -g pm2

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

COPY package.json /usr/src/app
RUN npm install

COPY . /usr/src/app

EXPOSE 3002

ENV NODE_ENV local

CMD pm2 start --no-daemon server.js

server.js 파일에 다음 코드로 로컬 mongodb에 연결되어 있습니다.

app.db = mongoose.connect("mongodb://127.0.0.1:27017/localv2", options);

위의 Docker 파일을 사용하여 만든 이미지에서 컨테이너를 회전시키면 이 작업이 수행되지 않습니다.도커가 자체 게이트웨이 IP 주소로 VLAN을 만든다고 어디선가 읽었습니다.내가 할 때docker inspect container,1.dll 파일 이름, IP 주소: 172.17.0.1.

mongodb 연결을 변경하는 경우에도

app.db = mongoose.connect("mongodb://172.17.0.1:27017/localv2", options)

이미지를 다시 빌드하고 새 컨테이너를 시작하면 다음과 같은 오류가 발생합니다.

MongoError: failed to connect to server [172.17.0.1:27017] on first connect [MongoError: connect ECONNREFUSED 172.17.0.1:27017]

컨이너실는명령:docker run -p 3002:3002 image-name

제발 도와주세요.

에서는 Mac을 할 수 .host.docker.internalmongo에서 .를 읽게 수. mongo 호 스 의 트 있 니 다 습 수 일 Docker 파 설 할 정 이 과 같 음 에 다 고 읽 를 수 서

ENV MONGO_HOST "host.docker.internal"

https://docs.docker.com/docker-for-mac/networking/ #사용 사례 및 해결 방법에 대한 자세한 내용은 여기를 참조하십시오.

여기에 @vlad-holubiev를 답변으로 추가하는 것은 그것이 나에게 효과가 있었고 사용자들이 그것을 찾는 데 도움이 되었기 때문입니다.

문서에 지정된 대로 도커 실행 시 네트워크 호스트 옵션 사용:

호스트하도록 설정된 네트워크를 사용하면 컨테이너가 호스트의 네트워크 스택을 공유하고 호스트의 모든 인터페이스를 컨테이너에서 사용할 수 있습니다.컨테이너의 호스트 이름이 호스트 시스템의 호스트 이름과 일치합니다.

docker run -d -e ROOT_URL=http://localhost -e MONGO_URL=mongodb://localhost:27017 --network="host"

입니다.
그래서 당신은 당신의 컴퓨터에 연결할 수 없을 것입니다.localhost.
컨테이너에서 mongo 서버를 실행하고 이미지 이름으로 연결해야 합니다.

mongodb://CONTAINER-NAME:port

를 작성.env다음과 같은 파일:

DB_HOST=myMongoServiceIp
DB_USER=myMongoDBUser
DB_PORT=myMongoServicePort
DB_PASSWORD=myMongoDBPort
DB_AUTH_NAME=myMongoDBAuthDatabase
DB_CONNECT_NAME=myStartDBConnection

에는 "MongoDB 서비스"를 하십시오.DB_HOSThost.vmdker.internal에 연결합니다.이는 특수 DNS 이름 전용이며, 호스트에서 사용하는 내부 IP 주소로 확인됩니다.물론, 당신은 그것을 교체해야 합니다.DB_HOST제품 모드에서 실행할 때 서버의 적절한 IP를 사용합니다.

예제는 다음과 ..env:

DB_HOST=host.docker.internal
DB_USER=app1
DB_PORT=27017
DB_PASSWORD=123
DB_AUTH_NAME=admin
DB_CONNECT_NAME=test

예를 들어 앱이 Mongoose로 작성된 경우 mongodb 연결 문자열은 다음과 같습니다.

var mongoConnectionString = `mongodb://${process.env.DB_USER}:${process.env.DB_PASSWORD}@${process.env.DB_HOST}:${process.env.DB_PORT}/${process.env.DB_CONNECT_NAME}?authSource=${process.env.DB_AUTH_NAME}`

궁극적으로, 지금 도커 컨테이너를 실행하기 위해, 당신이 해야 할 일은 당신의 것을 추가하는 것입니다..env다음과 같은 파일이 있습니다.

docker run --env-file .\src\.env --name MyContainer -dp 8080:8080 <myUser>/<repo>:<tagname>

그런 다음 다른 컨테이너 대신 로컬 MongoDB를 사용하는 컨테이너가 있습니다.

mongoose 연결 URL을 "mongodb://host.docker.internal:27017/db-name"으로 변경하면 컨테이너에서 mongoDB에 액세스할 수 있습니다.참조 https://docs.docker.com/desktop/networking/ #사용 사례 및 해결 방법

언급URL : https://stackoverflow.com/questions/43800164/connecting-to-local-mongodb-from-docker-container

반응형