【发布时间】:2018-05-31 18:08:16
【问题描述】:
我使用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 docker 服务中为celerybeat-schedule 编写卷挂载时,我得到permission denied。而当我在 web 服务中编写卷挂载命令时,celerybeat 服务启动得很愉快。这里发生了什么有人可以解释一下吗?我需要解决这个问题。
【问题讨论】:
-
当你说你在web service celerybeat 服务中写了卷挂载命令并且它启动得很愉快,你到底在运行什么命令?
-
我解决了这个问题,尽管我仍然无法理解。问题是我正在以 celery 用户身份运行启动节拍服务的命令。但是当我在不添加
su -m celery -c位的情况下启动服务时,它起作用了。为什么会出现这个问题?
标签: django docker celery celerybeat