[MONGODB] 고정 표시기 컨테이너 내부 MongoDB를 연결 오류
MONGODB고정 표시기 컨테이너 내부 MongoDB를 연결 오류
나는 몽고 컨테이너에 연결하는 기본 nodeJS API를 얻기 위해 노력했습니다. 두 서비스는 고정 표시기-compose.yml 파일에 정의되어 있습니다. 나는 모든 문제가 당신의 몽고 연결 URI가 없다는 여기 고정 표시기의 포럼에 셀 수없이 많은 비슷한 질문을 읽었습니다. 아래 살펴 보 겠지만 이건 내 문제가되지 않습니다.
도커-compose.yml
version: '3.7'
services:
api:
build: ./
command: npm run start:dev
working_dir: /usr/src/api-boiler/
restart: always
environment:
PORT: 3001
MONGODB_URI: mongodb://mongodb:27017/TodoApp
JWT_SECRET: asdkasd9a9sdn2r3513032
links:
- mongodb
ports:
- "3001:3001"
volumes:
- ./:/usr/src/api-boiler/
depends_on:
- mongodb
mongodb:
image: mongo
restart: always
volumes:
- /usr/local/var/mongodb:/data/db
ports:
- 27017:27017
Dockerfile
FROM node:10.8.0
WORKDIR /usr/src/api-boiler
COPY ./ ./
RUN npm install
CMD ["/bin/bash"]
DB / mongoose.js MongoDB의 연결 설정
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
mongoose.connect(
process.env.MONGODB_URI,
{ useMongoClient: true }
);
module.exports.mongoose = mongoose;
그러나 상관없이이 API를 컨테이너에 연결할 수없는 것을. 나는 0.0.0.0:3001하지만 기쁨에 몽고 URI 설정을 시도하고있다. 내가 db.serverCmdLineOpts를 사용하여 용기에 발사 몽고에 사용되는 구성 설정을 확인 (). 몽고는 모든 IP의 연결을 허용해야한다 있도록 명령 bind_ip_all이 통과되었습니다. 일반적인 문제는 몽고 컨테이너 이름으로 localhost를 대체 잊고 명이다. EG : MongoDB를 : // 로컬 호스트 : 27017 / 스크립트는 TodoApp >> MongoDB를 : //하여 MongoDB : 27017 / 스크립트는 TodoApp
그러나이 완료되었습니다. 그래서 꽤 난처한 상황에 빠진.
로그 - 좋은 측정을위한
Successfully built 388868008521
Successfully tagged api-boiler_api:latest
Starting api-boiler_mongodb_1 ... done
Recreating api-boiler_api_1 ... done
Attaching to api-boiler_mongodb_1, api-boiler_api_1
mongodb_1 | 2018-08-20T20:09:27.072+0000 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify -- sslDisabledProtocols 'none'
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=72af162616c8
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] db version v4.0.1
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] git version: 54f1582fc6eb01de4d4c42f26fc133e623f065fb
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] OpenSSL version: OpenSSL 1.0.2g 1 Mar 2016
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] allocator: tcmalloc
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] modules: none
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] build environment:
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] distmod: ubuntu1604
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] distarch: x86_64
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] target_arch: x86_64
mongodb_1 | 2018-08-20T20:09:27.085+0000 I CONTROL [initandlisten] options: { net: { bindIpAll: true } }
mongodb_1 | 2018-08-20T20:09:27.088+0000 W STORAGE [initandlisten] Detected unclean shutdown - /data/db/mongod.lock is not empty.
mongodb_1 | 2018-08-20T20:09:27.093+0000 I STORAGE [initandlisten] Detected data files in /data/db created by the 'wiredTiger' storage engine, so setting the active storage engine to 'wiredTiger'.
mongodb_1 | 2018-08-20T20:09:27.096+0000 W STORAGE [initandlisten] Recovering data from the last clean checkpoint.
mongodb_1 | 2018-08-20T20:09:27.097+0000 I STORAGE [initandlisten] wiredtiger_open config: create,cache_size=487M,session_max=20000,eviction= (threads_min=4,threads_max=4),config_base=false,statistics=(fast),log= (enabled=true,archive=true,path=journal,compressor=snappy),file_manager= (close_idle_time=100000),statistics_log=(wait=0),verbose= (recovery_progress),
api_1 |
api_1 | > api-boiler@0.1.0 start:dev /usr/src/api-boiler
api_1 | > cross-env NODE_ENV=development node server/server.js
api_1 |
api_1 | Started on port 3001
api_1 | (node:24) UnhandledPromiseRejectionWarning: MongoError: failed to connect to server [mongodb:27017] on first connect [MongoError: connect ECONNREFUSED 172.18.0.2:27017]
해결법
-
==============================
1.확인. 나는 그것을 해결했습니다. 여기이 블로그의 도움으로 - https://dev.to/hugodias/wait-for-mongodb-to-start-on-docker-3h8b
확인. 나는 그것을 해결했습니다. 여기이 블로그의 도움으로 - https://dev.to/hugodias/wait-for-mongodb-to-start-on-docker-3h8b
당신은 완전히 컨테이너 내부에서 다시 시작 MongoDB를 기다릴 필요가있다. 고정 표시기 - compose.yml의 depends_on 키는 충분하지 않습니다.
당신은 또한 고정 표시기 - 작성 - 대기를 활용하기 위해 Dockerfile를 업데이트해야합니다.
참고 - 여기 내 업데이트 고정 표시기-작성하고 Dockerfile 파일입니다.
버전 '3.7'
services: api: build: ./ working_dir: /usr/src/api-boiler/ restart: always environment: PORT: 3001 MONGODB_URI: mongodb://mongodb:27017/TodoApp JWT_SECRET: asdkasd9a9sdn2r3513032 ports: - "3001:3001" volumes: - ./:/usr/src/api-boiler/ depends_on: - mongodb environment: WAIT_HOSTS: mongodb:27017 mongodb: image: mongo container_name: mongodb restart: always volumes: - 27017:27017
FROM node:10.8.0 WORKDIR /usr/src/api-boiler COPY ./ ./ RUN npm install EXPOSE 3001 ## THE LIFE SAVER ADD https://github.com/ufoscout/docker-compose- wait/releases/download/2.2.1/wait /wait RUN chmod +x /wait # CMD ["/bin/bash"] CMD /wait && npm run start:dev
from https://stackoverflow.com/questions/51938049/mongodb-connection-error-inside-docker-container by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] 문서 및 MongoDB를에 조건을 일치의 모든 하위 문서 (사용 봄) 조회 (0) | 2019.12.26 |
---|---|
[MONGODB] JasperReports에 도서관과 MongoDB를 가진 GeneratePDF (0) | 2019.12.26 |
[MONGODB] CSV로 하위 문서에서 mongoexport 필드 (0) | 2019.12.26 |
[MONGODB] MongoDB의 배열에서의 여러 요소를 업데이트 [중복] (0) | 2019.12.26 |
[MONGODB] MongoDB의 최대 및 최소의 (0) | 2019.12.26 |