도커 컨테이너에서 로컬 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.internal
mongo에서 .를 읽게 수. 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_HOST
host.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
'programing' 카테고리의 다른 글
MongoDB upsert가 삽입 또는 업데이트를 수행했는지 확인합니다. (0) | 2023.05.21 |
---|---|
키 필드로 MongoDB 컬렉션의 모든 중복 문서 찾기 (0) | 2023.05.21 |
공식 R1C1의 기능은 무엇입니까? (0) | 2023.05.21 |
web.config 변환을 사용하여 "Replace Or Insert"를 수행할 수 있는 방법이 있습니까? (0) | 2023.05.21 |
app.use와 app.get in express.js의 차이 (0) | 2023.05.21 |