【问题标题】:Celery failing to start in docker芹菜无法在 docker 中启动
【发布时间】:2019-04-04 13:31:32
【问题描述】:

我正在使用以下 Dockerfile 启动 celery:

FROM python:3.7-alpine

RUN apk add --no-cache postgresql-libs && \
    apk add --no-cache gcc musl-dev postgresql-dev zlib-dev jpeg-dev && \
    apk add --no-cache graphviz-dev # some required by my project libs

ADD ./project/requirements.txt /
RUN pip3 install -r /requirements.txt
ADD ./project /app

RUN adduser -S celery
USER celery

WORKDIR /app
CMD ["/usr/local/bin/celery", "-A", "project", "worker", "--concurrency", "20", "-E", "-l", "info", "--statedb=/celery/celery.state"]

当我运行它时,它无法启动并出现错误:KeyError: 'db'。完整的回溯(我已经用 -l debug 开始 celery):

project_celery | [2019-04-04 16:27:51,178: DEBUG/MainProcess] | Worker: Preparing bootsteps.
project_celery | [2019-04-04 16:27:51,182: DEBUG/MainProcess] | Worker: Building graph...
project_celery | [2019-04-04 16:27:51,183: DEBUG/MainProcess] | Worker: New boot order: {StateDB, Timer, Hub, Pool, Autoscaler, Beat, Consumer}
project_celery | Traceback (most recent call last):
project_celery |   File "/usr/local/lib/python3.7/site-packages/kombu/utils/objects.py", line 42, in __get__
project_celery |     return obj.__dict__[self.__name__]
project_celery | KeyError: 'db'
project_celery |
project_celery | During handling of the above exception, another exception occurred:
project_celery |
project_celery | Traceback (most recent call last):
project_celery |   File "/usr/local/bin/celery", line 10, in <module>
project_celery |     sys.exit(main())
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/__main__.py", line 16, in main
project_celery |     _main()
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 322, in main
project_celery |     cmd.execute_from_commandline(argv)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 496, in execute_from_commandline
project_celery |     super(CeleryCommand, self).execute_from_commandline(argv)))
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 275, in execute_from_commandline
project_celery |     return self.handle_argv(self.prog_name, argv[1:])
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 488, in handle_argv
project_celery |     return self.execute(command, argv)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bin/celery.py", line 420, in execute
project_celery |     ).run_from_argv(self.prog_name, argv[1:], command=argv[0])
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bin/worker.py", line 223, in run_from_argv
project_celery |     return self(*args, **options)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bin/base.py", line 238, in __call__
project_celery |     ret = self.run(*args, **kwargs)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bin/worker.py", line 257, in run
project_celery |     **kwargs)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/worker/worker.py", line 101, in __init__
project_celery |     self.setup_instance(**self.prepare_args(**kwargs))
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/worker/worker.py", line 141, in setup_instance
project_celery |     self.blueprint.apply(self, **kwargs)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bootsteps.py", line 214, in apply
project_celery |     step.include(parent)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bootsteps.py", line 343, in include
project_celery |     return self._should_include(parent)[0]
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/bootsteps.py", line 339, in _should_include
project_celery |     return True, self.create(parent)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/worker/components.py", line 215, in create
project_celery |     w._persistence = w.state.Persistent(w.state, w.statedb, w.app.clock)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/worker/state.py", line 189, in __init__
project_celery |     self.merge()
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/worker/state.py", line 197, in merge
project_celery |     self._merge_with(self.db)
project_celery |   File "/usr/local/lib/python3.7/site-packages/kombu/utils/objects.py", line 44, in __get__
project_celery |     value = obj.__dict__[self.__name__] = self.__get(obj)
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/worker/state.py", line 266, in db
project_celery |     return self.open()
project_celery |   File "/usr/local/lib/python3.7/site-packages/celery/worker/state.py", line 193, in open
project_celery |     self.filename, protocol=self.protocol, writeback=True,
project_celery |   File "/usr/local/lib/python3.7/shelve.py", line 243, in open
project_celery |     return DbfilenameShelf(filename, flag, protocol, writeback)
project_celery |   File "/usr/local/lib/python3.7/shelve.py", line 227, in __init__
project_celery |     Shelf.__init__(self, dbm.open(filename, flag), protocol, writeback)
project_celery |   File "/usr/local/lib/python3.7/dbm/__init__.py", line 94, in open
project_celery |     return mod.open(file, flag, mode)
project_celery | _gdbm.error: [Errno 13] Permission denied

我尝试仅使用python:3.7 基本映像启动它,但发生了同样的错误。

怎么了?

【问题讨论】:

  • 您的错误是“权限被拒绝”,这意味着用户 celery 没有足够的权限来访问某些文件。您的用户能否创建此文件:/celery/celery.state
  • 你的 celery 版本是什么?
  • @marke 我正在使用最新的 celery 4.3.0
  • 是的,如果它是旧版本,我会说尝试 python3.6 但我认为 4.3.0 可以使用 python3.7。您正在使用什么命令构建 docker 容器?

标签: python docker celery dbm


【解决方案1】:

尝试将这样的内容添加到您的 Dockerfaile:

RUN mkdir /celery && chown celery /celery

【讨论】:

  • 实际上,/celery 是一个卷文件夹,所以我无法更改它的权限。另外,错误KeyErrorPermission denied 不只是一个后果吗?
  • 您可以通过在 dockerfile 中禁用指令 USER celery 来检查它以以 root 身份运行您的应用程序,如果一切正常,您的根本原因是 Permission denied,您应该找到什么文件不能被访问
  • 问题确实出在权限上。我通过在我的卷上运行 chmod -R 777 来修复它,因此 celery 用户可以在该卷上读取和写入数据
猜你喜欢
  • 2020-02-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 2018-05-23
  • 1970-01-01
  • 2021-01-13
  • 2019-02-02
  • 2017-04-14
相关资源
最近更新 更多