使用Docker时未加载Keycloak SPI提供程序和层

vlju58qv  于 2023-02-03  发布在  Docker
关注(0)|答案(2)|浏览(146)

我尝试用一些自定义的东西来设置一个Docker映像,比如一个logback扩展,所以我有一些CLI脚本,比如这个:

/subsystem=logging: remove()
/extension=org.jboss.as.logging: remove()

/extension=com.custom.logback: add()
/subsystem=com.custom.logback: add()

我也有CLI脚本来配置数据源池、主题、在keycloak-server子系统上添加一些SPI等。我把这些脚本放在/opt/jboss/startup-scripts目录中。但是,当我创建容器时,事情并不顺利。脚本没有按预期加载,keycloak启动时出现错误,没有加载提供程序,如领域使用的密码策略。
当我使用独立的Keycloak时,所有SPI提供程序都加载良好,如下面的日志所示:

2019-07-25 18:27:07.906 WARN  [org.keycloak.services] (ServerService Thread Pool -- 65) KC-SERVICES0047: custom-password-policy (com.custom.login.password.PasswordSecurityPolicyFactory) is implementing the internal SPI password-policy. This SPI is internal and may change without notice
2019-07-25 18:27:07.909 WARN  [org.keycloak.services] (ServerService Thread Pool -- 65) KC-SERVICES0047: custom-event (com.custom.event.KeycloakServerEventListenerProviderFactory) is implementing the internal SPI eventsListener. This SPI is internal and may change without notice
2019-07-25 18:27:08.026 WARN  [org.keycloak.services] (ServerService Thread Pool -- 65) KC-SERVICES0047: custom-mailer (com.custom.mail.MessageSenderProviderFactory) is implementing the internal SPI emailSender. This SPI is internal and may change without notice
2019-07-25 18:27:08.123 WARN  [org.keycloak.services] (ServerService Thread Pool -- 65) KC-SERVICES0047: custom-user-domain-verification (com.custom.login.domain.UserDomainVerificationFactory) is implementing the internal SPI authenticator. This SPI is internal and may change without notice
2019-07-25 18:27:08.123 WARN  [org.keycloak.services] (ServerService Thread Pool -- 65) KC-SERVICES0047: custom-recaptcha-username-password (com.custom.login.domain.RecaptchaAuthenticatorFactory) is implementing the internal SPI authenticator. This SPI is internal and may change without notice

如果我在Docker中使用相同的包,使用jboss/keycloak:6.0.1作为映像库,provider不会加载。我将其作为模块使用,将其添加到$JBOSS_HOME/modules文件夹中,并按照下面的脚本进行配置:

/subsystem=keycloak-server/: write-attribute(name=providers,value=[classpath:${jboss.home.dir}/providers/*,module:com.custom.custom-keycloak-server])

/subsystem=keycloak-server/theme=defaults/: write-attribute(name=welcomeTheme,value=custom)
/subsystem=keycloak-server/theme=defaults/: write-attribute(name=modules,value=[com.custom.custom-keycloak-server])

/subsystem=keycloak-server/spi=emailSender/: add(default-provider=custom-mailer)

当我在容器内执行脚本时,一切都正常。
我尝试了使用卷将jarMap到提供程序,以及在构建自定义映像时复制jar,但这些方法都不起作用。
我使用的是jboss:keycloak:6.0.1 docker图像和Keycloak 6.0.1独立版,层和模块放在相同的目录中。
我做错了什么?在Docker中使用SPI提供程序的技巧是什么?或者映像不是用于生产或这种类型的需要?

afdcj2ne

afdcj2ne1#

好吧,我知道为什么会这样了
它来自opt/jboss/tools/docker-entrypoint.sh

#################
# Configuration #
#################

# If the server configuration parameter is not present, append the HA profile.
if echo "$@" | egrep -v -- '-c |-c=|--server-config |--server-config='; then
    SYS_PROPS+=" -c=standalone-ha.xml"
fi

它将作为集群启动keycloak,因为我认为他们认为单机版对生产不安全
独立操作模式仅在您要运行一个且仅一个Keycloak服务器示例时有用。它不适用于群集部署,并且所有缓存都是非分布式且仅限本地的。建议您不要在生产中使用独立模式,因为这会导致单点故障。如果您的独立模式服务器关闭,用户将无法登录。此模式实际上只对试驾和体验Keycloak Blockquote的功能有用
要保持“独立模式”,请覆盖映像以添加属性-c standalone.xml作为参数:

CMD ["-b", "0.0.0.0", "-c", "standalone.xml"]
dfty9e19

dfty9e192#

https://hub.docker.com/r/jboss/keycloak/
要添加自定义提供程序,请扩展Keycloak映像并将提供程序添加到/opt/jboss/keycloak/standalone/deployments/目录。
您是否使用了自定义提供程序的/opt/jboss/keycloak/standalone/deployments/卷?

相关问题