django - docker中的共享镜像卷挂载错误

标签 django docker celery celerybeat

我用 docker-compose用于在 docker 中运行我的容器.我有两项服务 - 其中一项是 celerybeat和其他 web (我还有很多其他服务,但只考虑这些服务,因为它们包含我的问题)。
docker-compose.yml文件如下所示:

.
.
.

celerybeat:
  image: web-image
  volumes:
    - /home/ubuntu/celerybeat:/code/celerybeat
  command: >
    /bin/ash -c "su -m celery -c 'celery -A <application_here> beat -s /code/celerybeat/celerybeat-schedule'"

web:
  image: web-image
  volumes:
    - /home/ubuntu/celerybeat:/code/celerybeat
  command: >      
    <some_command_to_run_server>

在我的 Dockerfile我添加了这些命令以获得适当的权限
RUN mkdir celerybeat
RUN touch celerybeat/celerybeat-schedule
RUN chown -R celery:celery celerybeat

注意:在上面编写的 compose 文件结构中,我为两个容器提供了卷挂载(但实际上我一次使用一个),以便于不一次又一次地编写 compose 文件 .

问题实际上只在这里。从技术上讲,卷挂载应该只在 celerybeat 服务中提供。当我为 celerybeat-schedule 编写卷挂载时在 celerybeat docker 服务中,我得到 permission denied .而当我在 web 服务中编写卷挂载命令时,celerybeat 服务启动得很愉快。这里发生了什么有人可以解释一下吗?我需要解决这个问题。

最佳答案

您遇到的问题如下

volumes:
    - /home/ubuntu/celerybeat:/code/celerybeat

通过执行上述体积映射,您有效地取消了以下
RUN chown -R celery:celery celerybeat

并从卷挂载继承权限。解决方法是不使用 celery 用户或在您的 yaml 中使用以下
command: >
  /bin/ash -c "chown -R celery:celery /code/celerybeat && su -m celery -c 'celery -A <application_here> beat -s /code/celerybeat/celerybeat-schedule'"

关于django - docker中的共享镜像卷挂载错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47867782/

相关文章:

python - "celeryd stop"不工作

python - Django Keycloak 集成流程

python - Django - 始终呈现的上下文

python - Django - 如何创建文件并将其保存到模型的 FileField?

docker - 如何解决在 docker run 命令期间安装卷时权限被拒绝的问题?

python - 如何解决 “exec:\” Python\“: executable file not found in $PATH”:未知。用于AWS上的简单python脚本

Django 向用户推送 HTTP 响应

nginx - 无法启动openresty docker

python - celery 错误 'No such transport: amqp'

python - 将 n 个任务添加到 celery 队列并等待结果