Докер из контейнера вызывает другой контейнер (соединение отклонено) - PullRequest
0 голосов
/ 25 декабря 2018

У меня есть контейнер для двух служб NodeJS и один Nginx для обратного прокси.

Я сделал NGINX на порту 80, поэтому он общедоступен через localhost в моем браузере

Я также использую реверс-прокси proxy_pass каждому ответственному сервису.

  location /api/v1/service1/ {
    proxy_pass http://service1:3000/;
  }

  location /api/v1/service2/ {
    proxy_pass http://service2:3000/;
  }

В моей службе 1 есть модуль axios, который хочет вызвать службу 2, отправив запрос на localhost/api/v1/service2

Но он говорит, что в соединении отказано.Я сомневаюсь, что localhost в службе 1 относится к своему контейнеру, а не к хосту докера.

version: '3'
services:
  service1:
    build: './service1'
    networks:
      - backend
  service2:
    build: './service2'
    networks:
      - backend
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    networks:
      - backend

networks:
  backend:
    driver: bridge

Даже после использования сети он по-прежнему говорит ECONNREFUSED.
Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 25 декабря 2018

Попробуйте добавить depends_on в ваш файл docker-compose для nginx, как показано ниже:

version: '3'
services:
  service1:
    build: './service1'
    expose:
      - "3000"
    networks:
      - backend
  service2:
    build: './service2'
    expose:
      - "3000"
    networks:
      - backend
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    networks:
      - backend
    depends_on:
      - service1
      - service2

networks:
  backend:
    driver: bridge

Это будет гарантировать, что обе службы будут запущены первыми, прежде чем контейнер nginx попытается подключитьсяим.Возможно, в соединении отказано, потому что контейнер nginx продолжает падать из-за того, что он не находит две службы, работающие при запуске его файла conf и подключении к бэкэндам.

0 голосов
/ 25 декабря 2018

Полагаю, вам нужно также выставить порт 3000 для каждой службы.Как ниже:

version: '3'
services:
  service1:
    build: './service1'
    expose:
      - "3000"
    networks:
      - backend
  service2:
    build: './service2'
    expose:
      - "3000"
    networks:
      - backend
  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    networks:
      - backend

networks:
  backend:
    driver: bridge
...