Этапы Dockerfile для Django/react не работают вместе

У меня есть многоступенчатый Dockerfile для приложения Django/React, который создает следующую ошибку при запуске docker-compose up --build:

backend_1  |   File "/code/myapp/manage.py", line 17
backend_1  |     ) from exc
backend_1  |          ^
backend_1  | SyntaxError: invalid syntax
backend_1 exited with code 1

В настоящее время только контейнер frontend может работать с двумя нижеприведенными файлами:

Dockerfile:

FROM python:3.7-alpine3.12
ENV PYTHONUNBUFFERED=1
RUN mkdir /code
WORKDIR /code
COPY . /code
RUN pip install -r ./myapp/requirements.txt


FROM node:10

RUN mkdir /app
WORKDIR /app

# Copy the package.json file into our app directory
# COPY /myapp/frontend/package.json /app

COPY /myapp/frontend /app
# Install any needed packages specified in package.json
RUN npm install

EXPOSE 3000

# COPY /myapp/frontend /app
# COPY /myapp/frontend/src /app
CMD npm start

docker-compose-yml:

version: "2.0"
   
services:
  backend:
    build: .
    command: python /code/myapp/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    networks:
      - reactdrf
  web:
    build: .
    depends_on:
      - backend
    restart: always
    ports:
      - "3000:3000"
    stdin_open: true
    networks:
      - reactdrf

networks:
  reactdrf:

Структура проекта (соответствующие части):

project (каталог верхнего уровня)

  • api (бэкенд django)
  • фронтенд
    • public
    • src
    • package.json
  • myapp
    • manage.py
    • requirements.txt

docker-compose.yml

Dockerfile


Интересно то, что если закомментировать один сервис из Dockerfile или docker-compose.yml или другой, то оставшаяся часть работает нормально, т.е. каждый сервис может прекрасно работать сам по себе с заданными синтаксисами. Только при объединении я получаю вышеуказанную ошибку.

Я думал, что это может быть проблемой сети docker (контейнеры не видят друг друга), но ошибка больше похожа на проблему местоположения, хотя каждый сервис может нормально работать сам по себе?

Не уверен, в каком направлении двигаться дальше, любое понимание приветствуется.

Обновление:

Неправильно сконфигурировал свой проект, вот что я сделал, чтобы решить эту проблему: Разделил frontend и backend на их собственные Dockerfiles так, что 1-я часть моего Dockerfile выше (backend) является единственной частью Dockerfile, остающейся в корневом каталоге, а остальная часть находится в собственном Dockerfile в /frontend.

Обновлен путь сборки веб-сервиса docker-compose.yml, чтобы указать на это новое местоположение,

... 
web:
    build: ./myapp/frontend
...

кажется, что сборка теперь отправляет данные из бэкенда во фронтенд.

Что я узнал - несколько Dockerфайлов для нескольких сервисов. Склеивается вместе в docker-compose.yml вместо того, чтобы объединить их в один Dockerfile.

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