Keycloak で "Datasource: URL format error; must be jdbc:h2 ... but is jdbc:mariadb: ..." エラーが発生した場合の対処方法
Keycloak データベース接続エラー:詳細解説と解決方法
データベースの種類と接続URLの不一致
Keycloak は、デフォルトで H2 データベースを使用します。しかし、MariaDB などの別のデータベースを使用したい場合は、kc.sh
コマンドを使用してデータベース設定を変更する必要があります。
解決方法
# MariaDB を使用する
kc.sh build --db=mariadb
# 接続URLを指定
kc.sh start --db=mariadb --db-url=jdbc:mariadb://localhost:3306/keycloak
データベース設定ファイルの誤り
standalone.xml
ファイルなどのデータベース設定ファイルに誤りがある場合も、このエラーが発生します。
データベース設定ファイルの内容を確認し、誤りがないことを確認してください。以下の点に特に注意が必要です。
- データベースの種類
- 接続URL
- ユーザー名
- パスワード
データベースサーバーの起動
データベースサーバーが起動していない場合も、このエラーが発生します。
データベースサーバーが起動していることを確認してください。
- Docker Compose を使用している場合は、
docker-compose.yml
ファイルにもデータベース設定が含まれている可能性があります。
日本語での情報
version: '3.8'
services:
keycloak:
image: 'jboss/keycloak:19.0.1'
container_name: 'keycloak'
ports:
- '8080:8080'
environment:
- KC_DB=mariadb
- KC_DB_URL=jdbc:mariadb://mariadb:3306/keycloak
- KC_DB_USERNAME=keycloak
- KC_DB_PASSWORD=keycloak
depends_on:
- mariadb
mariadb:
image: 'mariadb:10.6.5'
container_name: 'mariadb'
ports:
- '3306:3306'
environment:
- MYSQL_ROOT_PASSWORD=password
- MYSQL_DATABASE=keycloak
Keycloak データベース設定ファイル (standalone.xml)
...
<datasources>
<datasource jndi-name="java:/DefaultDS" pool-name="DefaultDS">
<connection-url>jdbc:h2:mem:keycloak</connection-url>
<driver-class>org.h2.Driver</driver-class>
<security>
<user-name>sa</user-name>
<password/>
</security>
</datasource>
<datasource jndi-name="java:/keycloakDS" pool-name="keycloakDS">
<connection-url>jdbc:mariadb://localhost:3306/keycloak</connection-url>
<driver-class>org.mariadb.jdbc.Driver</driver-class>
<security>
<user-name>keycloak</user-name>
<password>keycloak</password>
</security>
</datasource>
</datasources>
...
Keycloak データベース接続確認コマンド
docker exec -it keycloak /opt/jboss/keycloak/bin/kc.sh status
docker exec -it keycloak /opt/jboss/keycloak/bin/kc.sh export
docker exec -it keycloak /opt/jboss/keycloak/bin/kc.sh import
注意事項
- ご利用環境に合わせて、コードを修正する必要があります。
KC_DB_URL
環境変数を使用して、データベース接続URLを指定できます。
KC_DB_URL=jdbc:mariadb://localhost:3306/keycloak kc.sh start
docker run コマンドを使用する
docker run
コマンドを使用して、Keycloak コンテナを起動する際にデータベース接続URLを指定できます。
docker run -it --rm -p 8080:8080 \
-e KC_DB=mariadb \
-e KC_DB_URL=jdbc:mariadb://localhost:3306/keycloak \
jboss/keycloak:19.0.1
Keycloak CLI を使用する
Keycloak CLI を使用して、データベース接続設定を変更できます。
kc.sh update-config --db=mariadb --db-url=jdbc:mariadb://localhost:3306/keycloak
docker jdbc docker-compose