2017-06-17 2 views
0

J'ai reçu l'erreur suivante lors de l'exécution du menu fixe. Le problème ne se produit pas du tout dans mon environnement de développement Mac OS (cette erreur se produisant lors du déploiement dans Ubuntu & debian), mais l'erreur semble suggérer que Celery n'a pas accès à l'écriture du fichier celerybeat. J'ai essayé pendant des jours essayant de faire fonctionner ceci (essayant de donner au céleri les autorisations nécessaires), mais n'ai eu aucune chance.OSError: [Errno 13] Autorisation refusée lors de l'initialisation de Celery dans Docker

Erreur

celery_1 | [2017-06-17 13:08:26,509: INFO/Beat] beat: Starting... 
celery_1 | [2017-06-17 13:08:26,556: ERROR/Beat] Removing corrupted schedule file 'celerybeat-schedule': DBAccessError(13, 'Permission denied') 
celery_1 | Traceback (most recent call last): 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 376, in setup_schedule 
celery_1 |  self._store = self._open_schedule() 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 366, in _open_schedule 
celery_1 |  return self.persistence.open(self.schedule_filename, writeback=True) 
celery_1 | File "/usr/local/lib/python2.7/shelve.py", line 243, in open 
celery_1 |  return DbfilenameShelf(filename, flag, protocol, writeback) 
celery_1 | File "/usr/local/lib/python2.7/shelve.py", line 227, in __init__ 
celery_1 |  Shelf.__init__(self, anydbm.open(filename, flag), protocol, writeback) 
celery_1 | File "/usr/local/lib/python2.7/anydbm.py", line 85, in open 
celery_1 |  return mod.open(file, flag, mode) 
celery_1 | File "/usr/local/lib/python2.7/dbhash.py", line 18, in open 
celery_1 |  return bsddb.hashopen(file, flag, mode) 
celery_1 | File "/usr/local/lib/python2.7/bsddb/__init__.py", line 364, in hashopen 
celery_1 |  d.open(file, db.DB_HASH, flags, mode) 
celery_1 | DBAccessError: (13, 'Permission denied') 
celery_1 | [2017-06-17 13:08:26,558: ERROR/Beat] Process Beat 
celery_1 | Traceback (most recent call last): 
celery_1 | File "/usr/local/lib/python2.7/site-packages/billiard/process.py", line 292, in _bootstrap 
celery_1 |  self.run() 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 553, in run 
celery_1 |  self.service.start(embedded_process=True) 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 470, in start 
celery_1 |  humanize_seconds(self.scheduler.max_interval)) 
celery_1 | File "/usr/local/lib/python2.7/site-packages/kombu/utils/__init__.py", line 325, in __get__ 
celery_1 |  value = obj.__dict__[self.__name__] = self.__get(obj) 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 512, in scheduler 
celery_1 |  return self.get_scheduler() 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 507, in get_scheduler 
celery_1 |  lazy=lazy) 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/utils/imports.py", line 53, in instantiate 
celery_1 |  return symbol_by_name(name)(*args, **kwargs) 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 358, in __init__ 
celery_1 |  Scheduler.__init__(self, *args, **kwargs) 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 185, in __init__ 
celery_1 |  self.setup_schedule() 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 384, in setup_schedule 
celery_1 |  self._store = self._destroy_open_corrupted_schedule(exc) 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 371, in _destroy_open_corrupted_schedule 
celery_1 |  self._remove_db() 
celery_1 | File "/usr/local/lib/python2.7/site-packages/celery/beat.py", line 363, in _remove_db 
celery_1 |  os.remove(self.schedule_filename + suffix) 
celery_1 | OSError: [Errno 13] Permission denied: 'celerybeat-schedule' 

Extrait de Dockerfile

FROM python:2.7-slim 
MAINTAINER Maintainer <[email protected]>  

RUN apt-get -y install sudo 

ENV INSTALL_PATH /minebase 
RUN mkdir -p $INSTALL_PATH 

WORKDIR $INSTALL_PATH 

COPY requirements.txt requirements.txt 
RUN pip install -r requirements.txt 

COPY . . 
RUN pip install --editable . 

CMD gunicorn -c "python:config.gunicorn" "minebase.app:create_app()" 

RUN groupadd -r celery && useradd -r -g celery celery | chpasswd && adduser celery sudo 

RUN sudo chown -R celery ./ 
USER celery 

CMD ["celery", "-A", "worker:app", "worker"] 

Docker-compose.yml

version: '2' 

services: 

    postgres: 
    image: 'postgres:9.5' 
    env_file: 
     - '.env' 
    volumes: 
     - 'postgres:/var/lib/postgresql/data' 
    ports: 
     - '5432:5432' 

    redis: 
    image: 'redis:3.0-alpine' 
    command: redis-server --requirepass password 
    volumes: 
     - 'redis:/var/lib/redis/data' 
    ports: 
     - '6379:6379' 

    minebase: 
    build: . 
    command: > 
     gunicorn -c "python:config.gunicorn" --reload "minebase.app:create_app()" --timeout 7200 --workers=5 
    env_file: 
     - '.env' 
    volumes: 
     - '.:/minebase' 
    ports: 
     - '8000:8000' 

    nginx: 
    restart: always 
    build: ./nginx/ 
    ports: 
     - "80:80" 
    volumes: 
     - '.:/minebase' 
    volumes_from: 
     - minebase 
    links: 
     - minebase:minebase 
    expose: 
     - 80 

    celery: 
    build: . 
    command: celery worker -B -l info -A minebase.blueprints.contact.tasks 
    env_file: 
     - '.env' 
    volumes: 
     - '.:/minebase' 

volumes: 
    postgres: 
    redis: 

Versions

version Céleri: v3.1.23

Version Docker: 17.05.0-ce

Docker Version compose: 1.13.0

+0

Pouvez-vous partager Dockerfile complet et composer? – gile

+0

@gile Bien sûr, je viens de les ajouter au corps de la question. –

Répondre

0

Pour ceux qui ont la même question a pu corrigez-le en donnant à l'utilisateur de céleri un accès en écriture au fichier celerybeat. J'ai d'abord été en mesure de le réparer en définissant manuellement l'autorisation de fichier dans Filezilla. Si vous souhaitez automatiser dans votre dockerfile vous pouvez ajouter ce code au bas du fichier:

USER root 

RUN sudo chown -R celery:celery celerybeat-schedule 

et assurez-vous que sudo est installé en premier en utilisant le code suivant:

RUN apt-get -y install sudo 
0

Centos . Ce problème est dû à SElinux. Type

# setenforce 0 
# sudo docker-compose ....