![](/img/trans.png)
[英]MacOS: How to mount volumes using docker-compose.yml and Dockerfile?
[英]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.