我在新的Openshift v3上部署了一个PHPpostgreqsl应用程序(TinyTinyRSS,https://github.com/dittos/ttrss-mirror)。在初始访问时,您可以从可用的模板创建一个config. php
,其中包含DB密码等,以使tt-rss能够连接到数据库。现在我需要将该文件添加到tt-rss期望的应用程序根目录(/select/app-root/src/)。
按照明显规范的方式,我创建了一个使用键config. php
和文件内容作为值的config map。然而,当将该配置文件挂载到卷中以使其可供应用程序使用时,我遇到了问题,因为显然期望卷的挂载点是一个不存在的目录,所以当我给出 /opt/app-root/src/的目标路径时,我的应用程序代码被覆盖了。
然后,我找到了一种在已经填充的目录中提供单个文件的方法:
您需要提供绝对路径,包括挂载路径中的文件名和子路径中的文件名。文件名(显然)需要与配置映射中的键匹配。
我这样做了,但这会导致无法访问(无权限)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文件移出你的repo目录,但是在容器已经运行后你需要做的任何事情都是.s2i/bin脚本的完美用例。这是一个示例run
脚本,完全按原样使用它,然后只需添加任何你需要的东西,比如移动文件,或者更改权限(注意:你不能更改任何需要root权限的东西)。最后,PHP的任何额外配置都可以通过PHPS2I留档中定义的环境变量来完成。
显然,这是bug,看到https://github.com/openshift/origin/issues/15750和https://bugzilla.redhat.com/show_bug.cgi?id=1481617#c1.
作为一种解决方法,像这样指定subPath
:subPath:… data/config.php
,一切都开始按预期工作。