Неуказание томов в службе docker-compose.yml

Docker версии 20.10.17, сборка 100c701

У меня есть vite, vue 3 frontend и django backend с базой данных postgres, celery и redis.

Когда я не включаю тома для api и celery service docker compose up проходит успешно.

Если я добавляю тома в api и celery (./api:/api)

  api:
    build: 
      context: ./backend/backend
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    command:  >
      sh -c   "python3 manage.py makemigrations &&
                python3 manage.py migrate &&
                python3 manage.py wait_for_db &&
                python3 manage.py runserver 0.0.0.0:8000"
    volumes:
      - ./api:/api/
    environment:
      - DB_HOST=db
      - DB_NAME=${DATABASE_NAME}
      - DB_USER=${DATABASE_USER}
      - DB_PASS=${DATABASE_PASSWORD}
    depends_on:
      - db

  celery:
    restart: always
    build:
      context: ./backend/backend
    command: celery -A backend worker -l info
    volumes:
      - ./api:/api/
    environment:
      - DB_HOST=db
      - DB_NAME=api
      - DB_USER=${DATABASE_USER}
      - DB_PASS=${DATABASE_PASSWORD}
    depends_on:
      - db
      - redis
      - api

тогда я получаю следующую ошибку:

Ошибка: Недопустимое значение для '-A' / '--app': Невозможно загрузить сельдерей приложение. Модуль backend не найден.

что говорит мне о том, что путь для тома неверен - хотя я не уверен, что должен его указать. Есть ли вред в том, чтобы не указывать тома для этих служб?

структура папок

.
├── backend
│   ├── backend
│   │   ├── backend
│   │   ├── core
│   │   ├── db.sqlite3
│   │   ├── Dockerfile
│   │   ├── manage.py
│   │   └── requirements.txt
│   └── venv
├── docker-compose.yml
└── frontend
    ├── Dockerfile
    ├── entrypoint.sh
    ├── index.html
    ├── node_modules
    ├── package.json
    ├── package-lock.json
    ├── postcss.config.js
    ├── public
    ├── README.md
    ├── src
    ├── tailwind.config.js
    ├── tsconfig.json
    ├── tsconfig.node.json
    └── vite.config.ts

frontend Dockerfile

FROM node:lts-alpine3.16
RUN addgroup app && adduser -S -G app app
USER app
WORKDIR /web
COPY entrypoint.sh /entrypoint.sh
USER root
RUN chmod +x /entrypoint.sh
USER app
COPY package*.json ./
USER root
RUN npm install
USER app
COPY . .
ENTRYPOINT ["/entrypoint.sh"]

backend Dockerfile

FROM python:3-alpine
RUN addgroup app && adduser -S -G app app
USER root
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
WORKDIR /api
COPY requirements.txt .
RUN apk add --update --no-cache postgresql-client jpeg-dev
RUN apk add --update --no-cache --virtual .tmp-build-deps \ 
    gcc libc-dev linux-headers postgresql-dev musl-dev zlib zlib-dev
RUN pip install -r requirements.txt
RUN apk del .tmp-build-deps
USER app
COPY . .
USER root
RUN chown -R app backend manage.py
USER app

docker-compose.yml

version: '3.9'

services:
  
  web:
    build: 
      context: ./frontend
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    command: npm run dev
 
  api:
    build: 
      context: ./backend/backend
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    command:  >
      sh -c   "python3 manage.py makemigrations &&
                python3 manage.py migrate &&
                python3 manage.py wait_for_db &&
                python3 manage.py runserver 0.0.0.0:8000"
    environment:
      - DB_HOST=db
      - DB_NAME=${DATABASE_NAME}
      - DB_USER=${DATABASE_USER}
      - DB_PASS=${DATABASE_PASSWORD}
    depends_on:
      - db
  
  db:
    image: postgres:14.1-alpine
    environment:
    - POSTGRES_DB=${DATABASE_NAME}
    - POSTGRES_USER=${DATABASE_USER}
    - POSTGRES_PASSWORD=${DATABASE_PASSWORD}
    volumes: 
      - pgdata:/var/lib/postgresql/data
  
  redis:
    image: redis:alpine

  celery:
    restart: always
    build:
      context: ./backend/backend
    command: celery -A backend worker -l info
    environment:
      - DB_HOST=db
      - DB_NAME=api
      - DB_USER=${DATABASE_USER}
      - DB_PASS=${DATABASE_PASSWORD}
    depends_on:
      - db
      - redis
      - api

volumes:
  pgdata:

Обнаружил, что определение объема следующим образом не вызывает ошибок и означает, что я не оставляю его без внимания.

celery:
    restart: always
    build:
      context: ./backend/backend
    command: celery -A backend worker -l info
    volumes:
      - api-volume:/api
    environment:
      - DB_HOST=db
      - DB_NAME=api
      - DB_USER=${DATABASE_USER}
      - DB_PASS=${DATABASE_PASSWORD}
    depends_on:
      - db
      - redis
      - api

volumes:
  api-volume:
    external: false
Вернуться на верх