Apache 更改添加文件到Docker卷的权限

Apache 更改添加文件到Docker卷的权限,apache,docker,nagios,Apache,Docker,Nagios,在报告中指出: 强烈建议您对图像中任何可变和/或用户可服务的部分使用VOLUME 通过查看例如的源代码,可以清楚地看到这一点,因为从nagios到apache配置目录的所有内容都可以作为卷提供 但是,在同一个映像中,apache服务(以及nagios的cgi脚本)默认作为nagios用户运行。因此,现在我陷入了困境,因为我似乎不知道如何添加自己的配置文件,例如为nagios监控定义更多主机。我试过: FROM cpuguy83/nagios ADD my_custom_config.cfg /o

在报告中指出:

强烈建议您对图像中任何可变和/或用户可服务的部分使用VOLUME

通过查看例如的源代码,可以清楚地看到这一点,因为从nagios到apache配置目录的所有内容都可以作为卷提供

但是,在同一个映像中,apache服务(以及nagios的cgi脚本)默认作为
nagios
用户运行。因此,现在我陷入了困境,因为我似乎不知道如何添加自己的配置文件,例如为nagios监控定义更多主机。我试过:

FROM cpuguy83/nagios
ADD my_custom_config.cfg /opt/nagios/etc/conf.d/
RUN chown nagios: /opt/nagios/etc/conf.d/my_custom_config.cfg
CMD ["/opt/local/bin/start_nagios"]
我按照正常方式构建,并尝试使用docker run-d-p8000:80运行它,但是我得到以下错误:

错误:无法打开配置文件“/opt/nagios/etc/conf.d/my_custom_config.cfg”进行读取:权限被拒绝

果然,文件夹中的权限如下所示(apache进程作为
nagios
运行):

现在,除了“更改原始Dockerfile”之外,没有其他合适的解决方案

老实说,我认为这里有一些核心概念我还没有掌握(因为我看不出将配置目录声明为卷或将服务运行为根目录以外的任何内容有什么意义)-因此,提供如上所述的Docker文件(通过添加多个卷遵循Docker最佳实践)是解决方案/问题:

  • 要将NAGIOS_USER/APACHE_RUN_USER更改为“root”并以root身份运行所有内容
  • 要删除nagios Dockerfile中的卷声明
  • 其他方法

如何使用您自己的配置文件扩展?

由于您在生成时将自己的my_custom_config.cfg文件直接添加到容器中,只需更改主机上my_custom_config.cfg文件的权限,然后使用docker build构建映像。主机权限被复制到容器映像中。

不,ADD不是这样工作的——至少在我的经验中不是这样。权限位被带入(即777),但所有者用户和组始终更改为root。这可以通过以下简单的Dockerfile进行验证:
来自cpuguy83/ubuntu运行useradd nagios ADD foo.txt/CMD[“sh”]
其中
foo.txt
由主机系统上的
nagios
所有。最终结果:
#ls-la/| grep foo-rwxrwx 1 root 0 Jan 5 18:15 foo.txt
我想我可以给我的配置文件权限664。是的,这就是我的意思,给文件全部读取权限。我现在无法验证这一点,因为dockerhub似乎已关闭,但我也怀疑nagios映像正在将用户设置为nagios,这意味着在您的映像中,您可能必须执行以下操作:用户root运行chown用户nagios以更改所有者。好吧,这至少暂时有效。以root用户身份运行该服务并不能让Apache感到高兴:)我将把它打开一天左右,以防其他人有其他建议——如果没有,我将把你的答案标记为解决了它。谢谢,非常感谢。如果您不想更改原始文件的权限/所有者,可以通过将ing文件添加到容器中的某个未卷位置(chown/chmod)并移动到目标位置来扩展此解决方法。
# ls -l /opt/nagios/etc/conf.d/
-rw-rw---- 1 root root 861 Jan  5 13:43 my_custom_config.cfg