2017-06-17 114 views
0

运行docker撰写时,我收到以下错误。这个问题在我的Mac OS开发环境中完全没有发生(在尝试部署到Debian & debian中时发生此错误),但是错误似乎表明Celery无法写入celerybeat文件。我一直在努力试图让这个工作(试图给予芹菜必要的权限),但没有运气。OSError:[Errno 13]在Docker中初始化Celery时,权限被拒绝

错误

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' 

从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"] 

多克尔-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: 

版本

芹菜版本:v3.1.23

泊坞版本:17.05.0-CE

码头工人组成的版本:1.13.0

+0

你能分享完整的Dockerfile并撰写吗? – gile

+0

@gile当然,我刚刚将它们添加到问题主体。 –

回答

0

对于那些有同样的问题才得以通过给celery用户写入celerybeat文件来修复它。我首先能够通过在Filezilla中手动设置文件权限来修复它。如果你想在你的dockerfile自动化此可以追加此代码到文件底部:

USER root 

RUN sudo chown -R celery:celery celerybeat-schedule 

,并确保sudo的首次安装使用下面的代码片段:

RUN apt-get -y install sudo 
0

的Centos 。这个问题是由SElinux引起的。类型

# setenforce 0 
# sudo docker-compose .... 
相关问题