【发布时间】:2021-03-04 17:46:00
【问题描述】:
当我尝试运行 docker 容器时,Celery Beat 会导致权限错误。这是因为 Docker 文件中的用户权限,所以我似乎在那里配置了一些错误。我尝试了所有可能的解决方案,但错误仍然出现。请帮我弄清楚我做错了什么。谢谢。
这是 Docker 文件:
FROM python:3.7-alpine
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /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
RUN mkdir /app
COPY ./app /app
WORKDIR /app
RUN adduser -D appuser
RUN chown -R appuser:appuser /app
RUN chmod -R 755 /app/staticfiles
USER appuser
和 docker-compose 文件:
version: '3'
services:
app:
build:
context: .
env_file:
- ./.env.dev
volumes:
- ./app:/app
- static_volume_app:/app/staticfiles
- media_volume_app:/app/media
command: >
sh -c "python3 manage.py migrate &&
python3 manage.py wait_for_db &&
gunicorn app.wsgi:application --bind 0.0.0.0:8000"
expose:
- "8000"
depends_on:
- db
db:
image: postgres:10-alpine
env_file:
- ./.env.dev
ports:
- "5432:5432"
volumes:
- pgdata:/var/lib/postgresql/data
redis:
image: redis:alpine
celery:
restart: always
build:
context: .
command: celery -A app worker -l info
volumes:
- ./app:/app
env_file:
- ./.env.dev
depends_on:
- db
- redis
- app
celery-beat:
build:
context: .
command: celery -A app beat -l info
volumes:
- ./app:/app
env_file:
- ./.env.dev
depends_on:
- db
- redis
- app
nginx:
restart: always
build:
context: .
dockerfile: ./nginx/Dockerfile
volumes:
- static_volume_app:/app/staticfiles
- media_volume_app:/app/media
ports:
- "80:80"
depends_on:
- app
volumes:
pgdata:
static_volume_app:
media_volume_app:
和完整的错误信息:
celery.platforms.LockFailed: [Errno 13] Permission denied: '/app/celerybeat.pid'
当我注释 Docker 文件中的最后 4 行是用户配置时,它工作正常。
【问题讨论】:
-
volumes:行覆盖了 Dockerfile 安装的所有内容,具有不同的文件和不同的权限。特别是RUN chmod被隐藏,主机上的(数字)文件所有者将优先。我建议删除这些volumes:和command:覆盖以使用图像中内置的内容。
标签: django docker docker-compose django-celery celerybeat