У меня есть приложение python / flask с Docker и Celery.
Мне удалось заставить все работать, когда я запускаю Celery Worker с привилегиями суперпользователя. Однако, как предположил Celery, это абсолютно не рекомендуется.
После добавления « user: nobody » в файл docker-compose, Я получил ошибку отказа в разрешении от Celery . Он больше не может получить доступ к /usr/src/app/run.py.
Вот мой файл docker-compose:
version: '3'
services:
web:
build: ./web
restart: always
environment:
- PYTHONUNBUFFERED=1
volumes:
- ./web:/usr/src/app
ports:
- "8441:8441"
depends_on:
- redis
celery:
build: ./web
command: "celery -A run:celery worker --loglevel=info"
user: nobody
depends_on:
- redis
- web
redis:
image: redis
command: redis-server
ports:
- "6379:6379"
и вот мой Dockerfile:
FROM python:3
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY requirements.txt /usr/src/app/
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "run.py"]
Я новичок в сельдерее и докере, поэтому не уверен, что это лучший способ настроить сельдерей, но я настроил сельдерей в init_ .py:
# config celery
celery = Celery(app.name, broker=app.config['CELERY_BROKER_URL'])
celery.conf.update(app.config)
app.celery = celery
и упомянул об этом в run.py:
from myapp import app
celery = app.celery
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8441, debug=True)
В случае, если это имеет значение, вот структура моего проекта:
├── docker-compose.yml
└── web
├── Dockerfile
├── myapp
│ ├── __init__.py
│ ├── config.py
│ ├── manage.py
│ ├── resources.py
│ ├── routes.py
│ ├── static
│ │ ├── main.css
│ │ ├── main.js
│ ├── tasks.py
│ ├── templates
│ │ ├── home.html
│ └── utils.py
├── requirements.txt
└── run.py
Любой вклад приветствуется!