码头中的共享图像卷安装错误

我使用docker-composedocker中运行我的容器。我有两个服务--和其他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

回到顶部