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_USER / APACHE_RUN_USER更改为'root'并以root用户身份运行所有内容?
  • 要为nagios删除Dockerfile中的VOLUME声明?
  • 其他方法?

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

    最佳答案

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

    关于apache - 更改添加文件对Docker卷的权限,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27784814/

    10-15 07:04