Docker-Compose: Невозможно соединить NodeJS с Mongo & Redis [Соединение отклонено] - PullRequest
3 голосов
/ 24 мая 2019

Я работаю с 3 сервисами:

  • api-knotain [основной сервис API]
  • api-mongo [mongo db for api service]
  • api-redis [redis for api service]

Dockerfile для api-knotain выглядит следующим образом

FROM node:latest
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm install
# If you are building your code for production
# RUN npm ci --only=production
# Bundle app source
COPY . .
CMD [ "npm", "start" ]

мой файл docker-compose таким образом:

version: '3.3'
services:
  api-knotain:
    container_name: api-knotain
    restart: always
    build: ../notify.apiV2/src
    ports:
      - "7777:7777"
    links:
      - api-mongo
      - api-redis
    environment:
      - REDIS_URI=api-redis
      - REDIS_PORT=32770
      - MONGO_URI=api-mongo
      - MONGO_PORT=27017
      - RESEED=true
      - NODE_TLS_REJECT_UNAUTHORIZED=0
  api-mongo: 
    container_name: api-mongo
    image: mongo
    volumes:
      - ./data:/data/db
    ports:
      - "27017:27017"
  api-redis:
    container_name: api-redis
    image: "redis:alpine"
    ports:
      - "32770:32770"

runnin

  • сборка docker-compose
  • сборка docker-up

вывод:

api-knotain    | connecting mongo ...: mongodb://api-mongo:27017/notify
api-knotain    | Redis error: Error: Redis connection to api-redis:32770 failed - connect ECONNREFUSED 172.21.0.2:32770
api-knotain    | mongo error:MongoNetworkError: failed to connect to server [api-mongo:27017] on first connect [MongoNetworkError: connect ECONNREFUSED 172.21.0.3:27017]
api-knotain    | Example app listening on port 7777!

ни mongo, ни redisможно подключить.Я пробовал следующие вещи:

  • использовать localhost вместо имени контейнера
  • использовать разные порты
  • использовать expose против порта

всегдас тем же результатом

примечание:

  • я могу без проблем подключиться к mongo & redis через локальный cli 'localhost: port'

what amЯ скучаю?

Ответы [ 3 ]

0 голосов
/ 24 мая 2019
version: '3.3'
services:
  api-knotain:
    depends_on:
      - api-mongo
      - api-redis
    container_name: api-knotain
    restart: always
    build: ../notify.apiV2/src
    ports:
      - "7777:7777"
    links:
      - api-mongo
      - api-redis
    environment:
      - REDIS_URI=api-redis
      - REDIS_PORT=32770
      - MONGO_URI=api-mongo
      - MONGO_PORT=27017
      - RESEED=true
      - NODE_TLS_REJECT_UNAUTHORIZED=0
  api-mongo: 
    container_name: api-mongo
    image: mongo
    volumes:
      - ./data:/data/db
    ports:
      - "27017:27017"
  api-redis:
    container_name: api-redis
    image: "redis:alpine"
    ports:
      - "32770:32770"
0 голосов
/ 27 мая 2019

Похоже, что зависящий_он не работал должным образом в версии 3.3 создания докера.после обновления версии до 3.7 все работает отлично без каких-либо изменений в файл композиции.

0 голосов
/ 24 мая 2019

Возможно, контейнеры redis и mongo запускаются позже, чем ваше приложение, и поэтому ваше приложение их не увидит. Чтобы противостоять этому, вы должны подождать, пока эти услуги будут готовы.

Также ссылки - это устаревшая функция Docker . Вы должны использовать disabled_on для управления порядком запуска и пользовательских сетей , если вы хотите изолировать свою базу данных и перенаправить контейнеры из внешней сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...