簡體   English   中英

未在服務 docker-compose.yml 中指定卷

[英]Not specifying volumes within service docker-compose.yml

Docker 版本 20.10.17,構建 100c701

我有一個帶有 postgres 數據庫、celery 和 redis 的 vite、vue 3 前端和 django 后端。

當我不包括 api 和 celery 服務的卷時,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”的值無效:無法加載 celery 應用程序。 未找到模塊后端。

這告訴我該卷的路徑不正確-盡管我不確定應該將其設置為什么。 不為這些服務指定數量有什么害處嗎?

文件夾結構

.
├── 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

前端 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"]

后端 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

碼頭工人-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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM