在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 dockerfile above?
答案 0 :(得分:0)
由于您在构建时将自己的my_custom_config.cfg文件直接添加到容器中,只需更改主机上my_custom_config.cfg文件的权限,然后使用docker build构建映像。主机权限将复制到容器映像中。