将添加文件的权限更改为Docker卷

时间:2015-01-05 17:36:21

标签: apache docker nagios

Docker best practices guide中声明:

  

强烈建议您将VOLUME用于图像的任何可变和/或用户可维修部分。

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

但是,查看相同的图像默认情况下,apache服务(以及nagios的cgi-scripts)作为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 -p 8000:80 <image_hash>运行它,但我收到以下错误:

  

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

果然,该文件夹中的权限看起来像是这样(希望apache进程以nagios运行):

# ls -l /opt/nagios/etc/conf.d/
-rw-rw---- 1 root root 861 Jan  5 13:43 my_custom_config.cfg

现在,this has been answered before (why doesn't chown work in Dockerfile),但除了“更改原始Dockerfile”之外没有其他适当的解决方案。

老实说,我认为这里有一些核心概念我没有掌握(因为我看不到将配置目录声明为VOLUME,也没有将服务作为root以外的其他任何东西) - 所以提供了一个如上所述的Dockerfile (通过添加多个卷遵循Docker最佳实践)是解决方案/问题:

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

您如何使用自己的配置文件扩展nagios dockerfile above

1 个答案:

答案 0 :(得分:0)

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