码头中的共享图像卷安装错误
我使用docker-compose
在docker
中运行我的容器。我有两个服务--和其他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
我已经添加了这些命令进行适当的权限
注:在我撰写的文件结构上面我所提供的卷安装书面对于两个容器(但实际上我一次只使用一个容器),因为不会一次又一次地写入组合文件。
问题实际上只在这里。从技术上讲,只能在celerybeat服务中提供卷装。当我在celerybeat泊坞服务中写入celerybeat-schedule
的卷装时,我得到permission denied
。而当我在Web服务中写入卷装入命令时,celerybeat服务开始愉快。这里发生的事情有人能解释我吗?我需要解决这个问题。
回答:
阶以下使用 - docker build
然后docker run
(与docker-compose up
计数为docker run
当您装入卷,文件并且该卷中的文件夹为root拥有RUN chown -R celery:celery celerybeat
如果您没有安装卷,则可以工作当您在docker run
/docker-compose up
中绑定安装卷时,/ code/celerybeat中的任何内容都将被覆盖,包括权限
因此,当你以root身份运行celerybeat时,在这种情况下你很棒。如果您按照您尝试的方式将其作为celery用户运行,则该用户无法访问/ code/celerybeat,因为作为绑定挂载卷,它由root拥有。
而不是chown
在您的Dockerfile中的目录,运行chown
作为入口点脚本的一部分。喜欢的东西:
#!/bin/bash chown -R celery:celery celerybeat
/bin/ash -c "su -m celery -c 'celery -A <application_here> beat -s /code/celerybeat/celerybeat-schedule'"
这个脚本,从而CHOWN,执行后绑定安装,其中RUN chown -R celery:celery celerybeat
执行之前绑定安装,并且被它覆盖。
回答:
你的问题是下面
volumes: - /home/ubuntu/celerybeat:/code/celerybeat
通过做上述卷映射,您可以有效地取消了下面
RUN chown -R celery:celery celerybeat
而且继承了卷安装的权限。解决方法是要么不使用芹菜用户或在你的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'"
以上是 码头中的共享图像卷安装错误 的全部内容, 来源链接: utcz.com/qa/263051.html