2017-06-17 112 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 .... 
相關問題