如何在OpenShift V3应用程序的非空目录中添加配置文件



我在新的OpenShift V3上部署了PHP PostGreqsl应用程序(Tinytiny RSS,https://github.com/dittos/ttrss-mirror)。在初始访问时,您可以从可用模板中创建一个config.php,其中包含数据库密码等,以使TT-RSS连接到数据库。现在,我需要将该文件添加到tt-rss期望的应用程序根目录(/opt/opt/app-root/src/)中。

按照我创建了用密钥 config.php configmap 创建a configmap 的方式,将文件内容作为值。但是,当将该配置文件安装到a 卷中以使其可用于应用程序时,我遇到了问题,因为显然期望该卷的 mountpoint 是非 - 现有目录,因此,当我给出/opt/app-root/src/的目标路径时,我的应用程序代码被覆盖。

然后,我找到了一种在已经填充的目录中提供单个文件的方法:

您需要再次提供绝对路径,包括挂载路径中的文件名和subpath中的文件名。该文件名(显然)需要匹配配置映射中的密钥。

我做到了,但这导致了具有非常奇怪属性的config.php文件,请参见部署的POD中的ls -la摘录:

drwxrwxr-x.  8 default root  4096 Sep 29 13:41 classes                                                                                                                                               
-??????????  ? ?       ?        ?            ? config.php                                                                                                                                            
-rw-rw-r--.  1 default root  8057 Sep 29 13:41 config.php-dist

config.php-dist是模板。问号怎么了?此功能在OpenShift上不起作用吗?

相关的yaml零件看起来像这样:

  volumeMounts:
    - mountPath: /opt/app-root/src/config.php
      name: volume-2k03m
      subPath: config.php

  volumes:
    - configMap:
        defaultMode: 420
        items:
          - key: config.php
            path: config.php
        name: tt-rss-config
      name: volume-2k03m

有没有办法修复此配置?是否有另一种方法可以"注入" config.php进入应用程序的"注入"(因为缺乏一个更好的单词)?

有些人推荐符号链接,但我不知道如何在所需位置编程创建一个符号链接,而不会遇到与config.php本身相同的问题。

我不想将其推向(公共)源存储库,因为它包含秘密,而源回购实际上是一个上游的存储库,我宁愿不朝叉并不断保持最新状态。

不熟悉tt-rss,我这样做的方法是预先创建config.php文件并将其包含在源代码中。您可以在config.php中使用环境变量来改变任何会更改的值。

,尚不清楚您是否必须将config.php文件移出回购目录,但是在容器已经运行后您需要做的任何事情都是.s2i/bin脚本的完美用例。这是一个示例run脚本,完全按原样使用它,然后只需添加您需要的其他内容,例如移动文件或更改权限(注意:您无法更改任何需要根本权限的内容)。最后,通过PHP S2I文档中定义的环境变量进行PHP CAM的任何其他配置。

显然,这是当前的错误,请参阅https://github.com/openshift/origin/origin/issues/15750和https://bugzilla.redhat.com/show_bug.cgi.cgi?id = 1481617#c1。

作为解决方法,请像这样指定subPathsubPath: ..data/config.php,一切都开始按预期工作。

最新更新