Предоставьте Celery права доступа к файлу в Docker - PullRequest
0 голосов
/ 28 мая 2019

У меня есть приложение 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

Любой вклад приветствуется!

...