Как подключить React контейнер к контейнеру nginx

Подскажите, как передать индекс из сборки Реакта в контейнер с Nginx и как должен выглядеть nginx.conf

    services:
      client:
        build:
          context: ./react-app
          dockerfile: Dockerfile
        ports:
          - "3000:3000"
      nginx:
        image: nginx:latest
        ports:
          - "80:80"
          - "433:433"

Ответы (1 шт):

Автор решения: Exploding Kitten

Для того, чтобы UI приложение работало в Docker вам можно создать более простую конфигурацию, состоящую только из nginx, но будет использоваться Multi Stage Build.

Dockerfile:

FROM node:latest as build
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY ["package.json", "package-lock.json*", "./"]
RUN npm install --production --silent && mv node_modules ../
COPY . .
RUN ["npm", "run", "build"]

FROM nginx:alpine as base
EXPOSE 80
COPY --from=build /usr/src/app/build /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]

На первом этапе (stage) мы собирает наше ReactJS приложение, после чего оно находится в папке /usr/src/app/build. А потом просто копируем его в nginx. Для этого подойдет и конфигурация по-умолчанию. Также если это просто для теста, то не думаю, что вам стоит заморачиваться с SSL, т.к. это потребует создания self-signed сертификатов, которым браузеры по-умолчанию не доверяют и сайт не откроется (нужно будет менять настройки браузера или ОС). Но, если интересно, про то как можно это сделать написано тут и тут.

docker-compose.yml

version: '3'
services: 
  app:
    build: ./react-app
    ports: 
      - "80:80"
→ Ссылка