Сборка Yarn не генерирует index.html во время сборки Docker, но работает вручную в контейнере (Nginx, React, Gunicorn, Django)

Я пытаюсь создать сайт с Nginx, React, Gunicorn и Django, используя Docker. Все работает хорошо, за исключением одной проблемы:

Когда я собираю контейнер Docker, команда yarn build не генерирует файл index.html внутри контейнера. Однако, когда я запускаю команду yarn build вручную внутри контейнера, она работает, и файл index.html появляется в папке /app/build.

О, я обнаружил, что Build dir не имеет index.html, имея 500 ошибку на сайте и эту ошибку в логах enginx :

[ошибка] 29#29: *1 цикл перезаписи или внутреннего перенаправления при внутреннем перенаправлении на «/index.html»...

Вот мой docker-compose.yml:

services:
  db:
    image: mysql:8.0
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - app-network

  backend:
    build: ./backend
    command: gunicorn aware.wsgi:application --bind 0.0.0.0:8000
    volumes:
      - ./backend:/app
    depends_on:
      - db
    environment:
      - DJANGO_SETTINGS_MODULE=aware.settings
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      - DB_HOST=${DB_HOST}
      - DB_PORT=${DB_PORT}
    networks:
      - app-network

  frontend:
    build: ./frontend/front
    volumes:
      - ./frontend/front:/app
      - ./frontend/front/build:/app/build
    networks:
      - "app-network"
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf
      - ./frontend/front/build:/app/frontend/front/build
      - ./frontend/front/build/static:/app/frontend/front/build/static
      - ./backend/media:/app/backend/media
      - ./frontend/front/build/favicon.ico:/app/frontend/front/build/favicon.ico
    depends_on:
      - backend
      - frontend
    networks:
      - app-network

volumes:
  db_data:

networks:
  app-network:
    driver: bridge

Вот мой nginx.config

events {
    worker_connections 1024;
}

http {
    include /etc/nginx/mime.types;
    server {
        listen 80;
        server_name example.ro www.example.ro;

        location / {
            root /usr/share/nginx/html;
            index index.html;
            try_files $uri /index.html;

        }

        location /api/ {
            proxy_pass http://backend:8000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }

        location /static/ {
            alias /app/frontend/front/build/static/;
        }

        location /media/ {
            alias /app/backend/media/;
        }

        location /favicon.ico {
        root /app/frontend/front/build;
        try_files $uri /favicon.ico;
        }
        

    }
}

Вот мой докерфайл с фронта:

FROM node:20 AS build

WORKDIR /app


COPY package.json yarn.lock ./
RUN yarn install


COPY . .


RUN yarn build && ls -lah build

RUN ls -lah /app/build

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

Я проверил журналы, и yarn build, похоже, выполняется правильно, но он не генерирует index.html в папке build. Я попробовал запустить yarn build вручную внутри контейнера, и он успешно сгенерировал файл index.html в каталоге /app/build. Я также проверил конфигурацию тома Docker, чтобы убедиться, что файлы смонтированы правильно.

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

Вернуться на верх