在 openshift 上的 coldfusion 中更新 Tomcat 的 server.xml 文件

Updating Tomcat's server.xml file in coldfusion on openshift

我正在努力将一些 coldfusion 应用程序从 linux redhat 服务器迁移到 openshift。一些应用程序的设置方式需要符号链接,默认情况下 Tomcat 会阻止。所以我需要更新 server.xml 配置文件,添加允许符号链接的属性。但是,每次我这样做时,都会在 coldfusion 启动时发生错误,阻止 .car 文件加载 cf 管理员设置。

我所做的是获取现有的 server.xml 文件,将 allowLinking="true" 属性添加到 /app 目录的资源标记中,并将该文件加载到 configmap 中,然后添加configmap 到我的部署 yaml

根据卷安装:

            - mountPath: /opt/coldfusion/cfusion/runtime/conf/server.xml
              name: volume-my3uz
              subPath: server.xml

下卷:

        - configMap:
            defaultMode: 420
            name: tomcat-config-q
          name: volume-my3uz

这有效(在某种程度上)... server.xml 文件被替换,符号链接有效,但包含所有管理员设置的 .car 文件不会加载。查看 openshift 中的启动日志,我看到了:

Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Updating webroot to /app
Configuring virtual directories
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml
Read-only file system: /opt/coldfusion/cfusion/runtime/conf/server.xml

然后再往下是冷聚变错误 - 找不到文件:/ColdFusionDockerStartupScripts/importCAR.cfm

我注意到的一件事是,即使我不尝试包含修改后的 server.xml 并坚持使用默认设置,该文件的时间戳也是 pod 启动时的时间戳。我的工作理论是初始 server.xml 文件中有一些东西定义了 ColdFusionDockerStartupScripts 目录,一旦完成,Coldfusion 就会删除该条目(因此我修改的文件是一个已经被 coldfusion 修改过的文件,没有那个入口)。但我现在真的只是猜测,不知道我做错了什么。

感谢 Adob​​e 论坛上的 post,我找到了答案: https://community.adobe.com/t5/coldfusion/coldfusion-2016-update-17-docker-facing-simlink-issue/m-p/12218493#M189428

基本上,我是正确的,coldfusion 在启动时对 server.xml 文件进行更新,并且尝试让 openshift 替换该文件似乎会干扰它。这一切都发生在以下位置的 coldfusion 启动脚本中 - /opt/startup/start-coldfusion.sh。因此解决方案是更新该脚本以将 allowLinking 属性添加到 xml 文件而不是直接更新它。

我在脚本中添加了以下行:

xmlstarlet ed -P -S -L -i /Server/Service/Engine/Host/Context/Resources -t attr -n "allowLinking" -v "true" /opt/coldfusion/cfusion/runtime/conf/server.xml

然后将更新后的文件放入 configmap 中,并让 openshift 替换该文件而不是 server.xml,这是可行的。