【问题标题】:openshift v3 sed couldn't open temporary fileopenshift v3 sed 无法打开临时文件
【发布时间】:2017-12-03 01:17:55
【问题描述】:

您好,我尝试将我的 docker 映像部署到 openshift online v3 但失败并显示消息

sed: 无法打开临时文件 /etc/php/7.0/apache2/sedJpqwn4: 权限被拒绝

我的 docker 镜像包含类似 sed 的脚本

RUN sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf

我是 openshift 和 docker 的新手,如何解决这个问题?

【问题讨论】:

    标签: php apache docker apache2 openshift


    【解决方案1】:

    即使文件/etc/apache2/apache2.conf 是可写的,当使用sed -i 时,该目录也必须是可写的,因为sed 将首先在该目录中创建一个临时文件。

    我的猜测是整个目录以及文件对于运行容器的用户是不可写的,这实际上是一个随机用户 ID。

    如果您正在构建自己的映像,则需要确保您的应用程序或启动代码需要修改的任何目录/文件是组 root 并且可按组写入。

    顺便说一句,如果这是您自己的图像,为什么不使用 PHP 的 Source-to-Image 构建器呢?

    【讨论】:

    • 当构建到 docker hub 时一切正常,问题是当部署到 openshift online v3 时,嗯,我会学习这个,谢谢
    • 去阅读blog.openshift.com/…它谈到了如何分配用户ID以及设计图像来处理它的需要。默认情况下,OpenShift 不允许您以 root 甚至设置的用户 ID 身份运行图像。它为您的项目分配一个用户 ID,并在该用户 ID 下运行图像。
    • 一般来说,以 root 身份运行映像是一个非常糟糕的主意,任何实施良好安全实践的平台都不允许您这样做,因为它使某人更容易破坏整个平台,如果发现任何漏洞,则可以访问其他用户的应用程序。
    【解决方案2】:

    你可以尝试切换到root:

    USER root
    RUN sed -i '/<Directory \/var\/www\/>/,/<\/Directory>/ s/AllowOverride None/AllowOverride All/' /etc/apache2/apache2.conf
    USER 185
    

    ID“185”是我使用的图像中它开始的原始用户,您可以使用以下方法测试您的案例:

    RUN id -u
    

    记得切换回非root,这是openshift与docker相关的限制之一。

    【讨论】:

      猜你喜欢
      • 2020-07-08
      • 1970-01-01
      • 2018-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多