[英]Using Docker and PostgreSQL: How can I set administrator password in official postgresql image? (But securely, not a living environment variable)
[英]How to set PostgreSQL schema for Keycloak when using the Docker Image?
我正在尝试将 Docker Image 用于 Keycloak,但我似乎无法为在 PostgreSQL 中创建的表设置架构。
目前所有表都在公共架构中。 有没有一种方法可以指示 Keycloak 在模式中创建表?
您应该能够为数据源指定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)
源代码: 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>
看起来他们不支持自动模式创建,因此您可能必须提交功能请求。
在运行 keycloak 之前,使用DB_SCHEMA
env 变量负责创建模式。
keycloak的docker镜像支持DB_SCHEMA
环境变量。 但是,必须在运行 keycloak 之前创建架构。
这是一个 docker compose 的示例,它首先在 postgres 容器中创建模式,然后运行 keycloak。
version: "3.8"
services:
db:
image: postgres:12
restart: always
ports:
- 5432:5432
volumes:
- /c/db:/var/lib/postgresql/data
# This will bind the files inside the pgscripts to docker-entrypoint-initdb.d
# The scripts will be run on startup
- $PWD/postgres:/docker-entrypoint-initdb.d
environment:
# This is required otherwise the container will fail to start
POSTGRES_PASSWORD: password
keycloak:
image: jboss/keycloak
ports:
- 8080:8080
depends_on:
- db
environment:
KEYCLOAK_USER: admin
KEYCLOAK_PASSWORD: password
DB_VENDOR: postgres
DB_ADDR: db
DB_PORT: 5432
DB_SCHEMA: keycloak_schema
DB_DATABASE: postgres
DB_USER: keycloak_user
DB_PASSWORD: keycloak_password
请注意,我正在使用卷绑定将主机postgres
目录下的文件绑定到 docker-entrypoint-initdb.d(更多信息在这里: How to create User/Database in script for Docker Postgres )
这是 init.sql 脚本
CREATE USER keycloak_user WITH PASSWORD 'keycloak_password';
CREATE SCHEMA IF NOT EXISTS keycloak_schema AUTHORIZATION keycloak_user;
在以下位置找到所有可能的配置参数
https://www.keycloak.org/server/all-config
直接链接到数据库连接
https://www.keycloak.org/server/all-config#_database
例如,当前模式参数是
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.