Nodejs и React внутри docker контейнеров - PullRequest
1 голос
/ 23 марта 2020

Я пытаюсь запустить проект Node / React внутри Docker контейнеров. У меня есть сервер NodeJS для API и клиентского приложения. У меня также установлено concurrently, и все работает нормально при запуске npm run dev.

Эта проблема возникает, когда я запускаю сервер и приложение через файл docker-compose.yml, и я получаю следующую ошибку от клиента:

client | [HPM] Error occurred while trying to proxy request /api/current_user from localhost:3000 to http://localhost:5000 (ECONNREFUSED) (https://nodejs.org/api/errors.html#errors_common_system_errors)

Вот docker -compose.yml

version: "3"
services:
  frontend:
    container_name: client
    build:
      context: ./client
      dockerfile: Dockerfile
    image: client
    ports:
      - "3000:3000"
    volumes:
      - ./client:/usr/src/app
    networks:
      - local
  backend:
    container_name: server
    build:
      context: ./
      dockerfile: Dockerfile
    image: server
    ports:
      - "5000:5000"
    depends_on:
      - frontend
    volumes:
      - ./:/usr/src/app
    networks:
      - local
networks:
  local:
    driver: bridge

Dockerfile сервера

FROM node:lts-slim

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

EXPOSE 5000

# You can change this
CMD [ "npm", "run", "dev" ]

Client Dockerfile

FROM node:lts-slim

RUN mkdir -p /usr/src/app

WORKDIR /usr/src/app

EXPOSE 3000

CMD [ "npm", "start" ]

Я использую "http-proxy-middleware": "^0.21.0", поэтому мой setupProxy.js равен

const proxy = require('http-proxy-middleware');

module.exports = function(app) {
    app.use(proxy('/auth/google', { target: 'http://localhost:5000' }));
    app.use(proxy('/api/**', { target: 'http://localhost:5000' }));
};

1 Ответ

3 голосов
/ 23 марта 2020

Вы должны использовать имя_ контейнера вместо localhost

    app.use(proxy('/auth/google', { target: 'http://localhost:5000' }));
    app.use(proxy('/api/**', { target: 'http://localhost:5000' }));

Вы также можете проверить эти данные, проверив вашу сеть, используя следующую команду: -

docker inspect <network_name>

It покажет все подключенные контейнеры к сети, а также имена хостов, созданные для этих контейнеров.

ПРИМЕЧАНИЕ. Имена хостов создаются на основе имен контейнеров, в противном случае на основе имен сервисов.

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