使用 Docker 映像时如何为 Keycloak 设置 PostgreSQL 架构?

Mar*_*rco 5 postgresql docker keycloak

我正在尝试使用 Keycloak 的 Docker 映像,但我似乎无法为 PostgreSQL 中创建的表设置架构。

目前,所有表最终都在公共模式中。有没有一种方法可以指示 Keycloak 在模式内创建表?

Tom*_*ley 1

您应该能够POSTGRES_DATABASE为数据源指定环境变量:

docker ... -e POSTGRES_DATABASE=<your_database_name> ...

默认情况下,它应该使用数据库名称'keycloak',所以你看不到这一点很奇怪:

/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:postgresql://${env.POSTGRES_ADDR:postgres}:${env.POSTGRES_PORT:5432}/${env.POSTGRES_DATABASE:keycloak}, driver-name=postgresql)
Run Code Online (Sandbox Code Playgroud)

源代码: https://github.com/jboss-dockerfiles/keycloak/blob/cd866b905d026eb69dab5176b352064252d92aff/server/cli/databases/postgres/change-database.cli#L2

更新

抱歉,我明白你的意思。在这种情况下,我认为您必须在数据库中手动创建架构,然后更新standalone.xml以使用您的架构:

<spi name="connectionsJpa">
  <provider name="default" enabled="true">
    <properties>
      <property name="dataSource" value="java:jboss/datasources/KeycloakDS"/>
      <property name="initializeEmpty" value="true"/>
      <property name="migrationStrategy" value="update"/>
      <property name="migrationExport" value="${jboss.home.dir}/keycloak-database-update.sql"/>
      <property name="schema" value="your_schema"/>
    </properties>
  </provider>
</spi>
Run Code Online (Sandbox Code Playgroud)

他们似乎不支持自动架构创建,因此您可能必须提交功能请求。