我用 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/