简体   繁体   English

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

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

Docker version 20.10.17, build 100c701 Docker 版本 20.10.17,构建 100c701

I have a vite, vue 3 frontend and django backend with postgres database, celery and redis.我有一个带有 postgres 数据库、celery 和 redis 的 vite、vue 3 前端和 django 后端。

When I do not include volumes for api and celery service docker compose up is successful.当我不包括 api 和 celery 服务的卷时,docker compose up 是成功的。

If I add volumes to api and celery (./api:/api)如果我将卷添加到 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

then I get the following error:然后我收到以下错误:

Error: Invalid value for '-A' / '--app': Unable to load celery application.错误:“-A”/“--app”的值无效:无法加载 celery 应用程序。 The module backend was not found.未找到模块后端。

which tells me that the path for the volume is not correct - though I am not sure what I should set it as.这告诉我该卷的路径不正确-尽管我不确定应该将其设置为什么。 Is there any harm in not specifying volumes for these services?不为这些服务指定数量有什么害处吗?

folder structure文件夹结构

.
├── 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前端 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后端 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码头工人-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:

Found that defining the volume as follows throws no errors and means I don't leave it out.发现按如下方式定义音量不会引发任何错误,并且意味着我不会遗漏它。

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.

相关问题 MacOS:如何使用 docker-compose.yml 和 Dockerfile 挂载卷? - MacOS: How to mount volumes using docker-compose.yml and Dockerfile? 带有 docker-compose.yml 的 Dockerfile - Dockerfile with docker-compose.yml 使用PyYAML编辑docker-compose.yml - Editing docker-compose.yml with PyYAML 导航到 docker-compose.yml 文件时遇到问题 - Have problem to navigate to a docker-compose.yml file 在 docker-compose.yml 中运行 Python package 和 multiple.py 脚本 - Run Python package with multiple .py scripts in docker-compose.yml 更改 docker-compose.yml 以使用 python 添加端口 - Alter docker-compose.yml to add ports with python 在文件 Dockerfile、docker-compose.yml、python.py 和 Z2591C98B70119FE6248Z198B1E4 之间共享值 - sharing values among files Dockerfile, docker-compose.yml, python.py, and shell 什么是运行 python 脚本的基本 Dockerfile/docker-compose.yml(使用特定版本的 python/包) - what is a bare-bones Dockerfile/docker-compose.yml to run python scripts (with specific versions of python/packages) 设置 docker-compose.yml 以运行 celery worker 和 celery beat 以 redis 作为代理的 django 项目 - Setting up docker-compose.yml to run celery worker and celery beat for a django project with redis as broker docker - 如何从 env.ini 文件外部为 docker-compose.yml 文件设置环境数据库? - docker - How to set up environment database for docker-compose.yml file from env.ini file outide?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM