【发布时间】:2015-01-05 17:36:21
【问题描述】:
在Docker best practices guide 中声明:
强烈建议您将 VOLUME 用于图像的任何可变和/或用户可维护的部分。
通过查看源代码,例如cpuguy83/nagios image 这可以清楚地看到完成,因为从 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 -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?
【问题讨论】: