【问题标题】:Changing permissions of added file to a Docker volume将添加文件的权限更改为 Docker 卷
【发布时间】: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

【问题讨论】:

    标签: apache docker nagios


    【解决方案1】:

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

    【讨论】:

    • 不,这不是 ADD 的工作方式——至少在我的经验中不是这样。权限位被保留(即 777),但所有者用户和组始终更改为 root。这可以通过以下简单的 Dockerfile 进行验证:FROM cpuguy83/ubuntu RUN useradd nagios ADD foo.txt / CMD ["sh"] 其中foo.txt 由主机系统上的nagios 拥有。最终结果:# ls -la / |grep foo -rwxrwxrwx 1 root root 0 Jan 5 18:15 foo.txt
    • 我想我可以给我的配置文件权限 664。
    • 是的,这就是我的意思,将所有内容都读取到文件中。我现在无法验证这一点,因为 dockerhub 似乎已关闭,但我也怀疑 nagios 映像正在将用户设置为 nagios,这意味着在您的映像中您可能必须这样做:USER root RUN chown USER nagios 以更改所有者。见github.com/docker/docker/issues/6119
    • 好吧,这至少现在可行。事实证明,以 root 身份运行服务不会让 Apache 满意 :) 我会保持这个开放一天左右,以防其他人有其他提议 - 如果没有,我会标记你的回答为解决它。谢谢,不胜感激。
    • 如果您不想更改原始文件的权限/所有者,您可以通过将文件添加到容器内的某个未卷的位置 chown/chmod 并移动到目标目的地。
    猜你喜欢
    • 2016-02-04
    • 1970-01-01
    • 2018-03-17
    • 2015-10-25
    • 2019-12-06
    • 2021-10-15
    • 2019-11-30
    • 2018-11-24
    • 2020-08-07
    相关资源
    最近更新 更多