背景
我们的计划是为我们的业务部署当前版本的KeyCloak。我们使用OpenShift在线托管类似的服务。OpenShift-Online中的Pods (容器)不具有根权限,这意味着/keycloak的标准实现在启动时失败,试图在没有写入权限的情况下写入日志文件。一个解决方案是给pod编写的权限,就像这样。然而,这在OpenShift Online中是不可能的,因为我们不拥有集群,只有我们工作的项目。
实际问题
这样做的目的是在运行KeyCloak的Jboss中禁用相关的日志配置,这样日志就不会写入文件中。由于日志是写到控制台上的,所以日志仍然由OpenShift收集,所以我们不需要将日志记录到文件中。
在研究了keycloak/keycloak和jboss/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中声明?是否有第二个配置文件代替使用?有没有办法强制对该处理程序进行覆盖?
发布于 2018-08-17 14:27:23
实际上不是对有关记录器的原始问题的回答,而是一个解决办法:使用图像jboss/keycloak-openshift (GitHub),KeyCloak可以在OpenShift Online上运行,而无需进一步配置日志记录。还有一些额外的配置需要完成:
..。
containers: - args:
- start-keycloak.sh
- '-b 0.0.0.0'...
https://stackoverflow.com/questions/51836394
复制相似问题