背景
该计划是为我们的业务部署最新版本的KeyCloak。我们使用OpenShift Online托管类似服务。 OpenShift-Online中的Pod(容器)没有root特权,这意味着jboss-dockerfiles/keycloak的标准实现在启动时失败,试图在未经许可的情况下写入日志文件。
一种解决方案是授予pod的写权限like so。但是,在OpenShift Online中这是不可能的,因为我们不拥有集群,而只有我们工作的项目。
实际问题
这个想法是在运行KeyCloak的Jboss中禁用相关的日志记录配置,以便将日志不写入文件中。由于日志已写入控制台,因此OpenShift仍会收集日志,因此我们仍然不需要将日志记录到文件中。
研究了keycloak / keycloak和jboss-dockerfiles / keycloak如何协同工作之后,我在服务器standalone.xml文件中找到了相关的配置行。我将以下行添加到项目的Dockerfile中,以从服务器中删除PeriodicRotatingFileHandler:
sed -i -e '/<periodic-rotating-file-handler/,/<\/periodic-rotating-file-handler>/d' /opt/jboss/keycloak/standalone/configuration/standalone.xml
这确实有效-当我在创建后使用docker run --rm -it --entrypoint=/bin/bash <imageId>
输入容器文件系统并检查standalone.xml时,将PeriodicRotatingFileHandler配置为“ FILE”的相关行已消失。
当我在OpenShift Online中启动新容器时,部署仍然失败,但是,因为服务器仍尝试启动记录器:
Cannot start embedded server: Failed to instantiate class "org.jboss.logmanager.handlers.PeriodicRotatingFileHandler" for handler "FILE": java.lang.reflect.InvocationTargetException: /opt/jboss/keycloak/standalone/log/server.log (Permission denied)
[...]
java.lang.IllegalArgumentException: Failed to instantiate class "org.jboss.logmanager.handlers.PeriodicRotatingFileHandler" for handler "FILE"
尽管服务器不再在standalone.xml中声明,为什么服务器仍在启动该记录器?是否有第二个配置文件代替?有没有办法强制对该处理程序进行覆盖?
答案 0 :(得分:1)
对记录器的原始问题并不是真正的答案,但是可以采用的解决方法: 使用映像jboss/keycloak-openshift(GitHub),可以在OpenShift Online上运行KeyCloak,而无需进一步配置日志记录。还有一些其他配置需要完成:
docker run
args: [...]
容器:
-args:
-start-keycloak.sh
-'-b 0.0.0.0'
[...]