在Docker best practices guide中指出:
并且通过查看例如的源代码cpuguy83/nagios image可以清楚地看到已经完成,因为从nagios到apache config目录的所有内容都可以作为卷使用。
但是,默认情况下,查看同一张图片,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>
运行它,但是我收到以下错误:确实,该文件夹中的权限如下所示(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?
最佳答案
由于您是在构建时将自己的my_custom_config.cfg文件直接添加到容器中,因此只需更改主机上my_custom_config.cfg文件的权限,然后使用docker build即可构建镜像。主机权限将复制到容器镜像中。
关于apache - 更改添加文件对Docker卷的权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27784814/