#django #docker #docker-compose #django-celery #celerybeat
#джанго #докер #docker-создать #джанго-сельдерей #сельдерейный биток
Вопрос:
Celery Beat вызывает ошибку разрешения, когда я пытаюсь запустить контейнеры docker. Это связано с правами пользователя в файле 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-создать файл:
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 amp;amp;
python3 manage.py wait_for_db amp;amp;
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'
Когда я комментирую последние 4 строки в файле Docker, который является пользовательскими конфигурациями, он работает нормально.
Комментарии:
1.
volumes:
Строки перезаписывают все, что устанавливает Dockerfile, с разными файлами и разными разрешениями. В частностиRUN chmod
, скрытый и (числовой) владелец файла на хосте будет иметь приоритет. Я бы рекомендовал удалить ихvolumes:
иcommand:
переопределить, чтобы использовать то, что встроено в изображение.
Ответ №1:
На самом деле, это сработало, изменив пользователя в службе celery beat:
celery-beat:
build:
context: .
user: root
command: celery -A app beat -l info
volumes:
- ./app:/app
env_file:
- ./.env.dev
depends_on:
- db
- redis
- app