I'm trying to configure my keycloak-18 running on helm-chart with external mysql database-8 version.
here is my helm chart file
values.yaml file
image:repository: quay.io/keycloak/keycloakpullPolicy: IfNotPresent# Overrides the image tag whose default is the chart appVersion.tag: "18.0.0"args: ["start-dev","--log-console-color=true","--db=mysql","--db-username=****","--db-password=*****","--db-url=jdbc:mysql://194.148.0.57/keycloakblockchain"]
deployment file
- name: {{ .Chart.Name }}securityContext:{{- toYaml .Values.securityContext | nindent 12 }}image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}"imagePullPolicy: {{ .Values.image.pullPolicy }}args: {{ .Values.args }}
ERROR
2022-05-05 02:43:50,762 ERROR [org.keycloak.quarkus.runtime.cli.ExecutionExceptionHandler] (main) ERROR: No suitable driver found for jdbc:mysql://194.148.0.57/keycloakblockchain2022-05-05 02:43:38,765 WARN [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator] (JPA Startup Thread: keycloak-default) HHH000342: Could not obtain connection to query metadata: java.sql.SQLException: No suitable driver found for jdbc:mysql://194.148.0.57/keycloakblockchainat org.h2.jdbcx.JdbcDataSource.getJdbcConnection(JdbcDataSource.java:191)at org.h2.jdbcx.JdbcDataSource.getXAConnection(JdbcDataSource.java:352)at io.agroal.pool.ConnectionFactory.createConnection(ConnectionFactory.java:216)at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:513)at io.agroal.pool.ConnectionPool$CreateConnectionTask.call(ConnectionPool.java:494)at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)at io.agroal.pool.util.PriorityScheduledExecutor.beforeExecute(PriorityScheduledExecutor.java:75)at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1126)at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)at java.base/java.lang.Thread.run(Thread.java:829)```
Best Answer
Try removing the jdbc: and just use the mysql:/ instead
"--db-url=mysql://194.148.0.57/keycloakblockchain"
I had the same issue. Took me some time to notice that I had a typo in "KC_DB=mysql"
while building the production image.
If you used the Dockerfile from here: https://www.keycloak.org/server/containers
than you should just need to change the KC_DB
environment var to mysql.
My Docker file:
FROM quay.io/keycloak/keycloak:18.0.2 as builderENV KC_HEALTH_ENABLED=trueENV KC_METRICS_ENABLED=trueENV KC_PROXY=edgeENV KC_DB=mariadbENV KC_DB_URL_PROPERTIES=characterEncoding=UTF-8ENV KC_TRANSACTION_XA_ENABLED=falseENV KC_CACHE_CONFIG_FILE=cache-ispn-jdbc-ping.xmlCOPY cache-ispn-jdbc-ping.xml /opt/keycloak/conf/cache-ispn-jdbc-ping.xmlRUN curl -sL https://github.com/aerogear/keycloak-metrics-spi/releases/download/2.5.3/keycloak-metrics-spi-2.5.3.jar -o /opt/keycloak/providers/keycloak-metrics-spi-2.5.3.jarRUN /opt/keycloak/bin/kc.sh buildFROM quay.io/keycloak/keycloak:latestCOPY --from=builder /opt/keycloak/ /opt/keycloak/WORKDIR /opt/keycloakENTRYPOINT ["/opt/keycloak/bin/kc.sh", "start"]
My docker-compose.yml (I used to test locally):
[...]keycloak:build:context: ./keycloakdockerfile: Dockerfilecontainer_name: 'keycloak'restart: 'no'labels:- 'traefik.enable=true'- 'traefik.http.services.keycloak.loadbalancer.server.port=8080'- 'traefik.http.routers.keycloak.entrypoints=http'- 'traefik.http.routers.keycloak.rule=Host(`sso.localhost`) || Host(`sso.${HOSTNAME}`)'- 'traefik.http.routers.keycloak.service=keycloak@docker'environment:KC_EXTERNAL_IP: 172.21.2.2KC_EXTERNAL_PORT: 9600KC_DB_URL_HOST: db-keycloakKC_DB_URL_PORT: 3306KC_DB_URL_DATABASE: dbKC_DB_USERNAME: userKC_DB_PASSWORD: passKC_PROXY: edgeKC_HOSTNAME_STRICT: falseKEYCLOAK_ADMIN: rootKEYCLOAK_ADMIN_PASSWORD: rootnetworks:internal:ipv4_address: 172.21.2.2expose:- '8080'- '9600'ports:- '82:8080'depends_on:- db-keycloak[...]