Search code examples
keycloakkeycloak-services

Keycloak 18.0 with Postgres 10.21


I am trying to run Keycloak 18 with postgres 10.21

Here is my docker compose

version: "3.5"

services:

  keycloaksvc:
    image: quay.io/keycloak/keycloak:18.0
    user: '1000:1000'
    container_name: "testkc"
    environment:
      - DB_VENDOR=postgres
      - DB_ADDR=postgressvc
      - DB_DATABASE=keycloak
      - DB_PORT=5432
      - DB_SCHEMA=public
      - DB_USER=KcUser
      - DB_PASSWORD=KcPass
      - KC_HOSTNAME=localhost
      - ROOT_LOGLEVEL=DEBUG
      - PROXY_ADDRESS_FORWARDING=true
      - REDIRECT_SOCKET=proxy-https
      - KEYCLOAK_LOGLEVEL=DEBUG
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=testing

    volumes:
       - ./ssldir:/etc/x509/https
       - "/etc/timezone:/etc/timezone:ro"
       - "/etc/localtime:/etc/localtime:ro"
       - "/etc/passwd:/etc/passwd:ro"
       - ./kcthemes:/opt/keycloak/themes

    entrypoint: /opt/keycloak/bin/kc.sh start --auto-build  --hostname-strict-https=false  --http-relative-path=/auth --features=token-exchange  --https-certificate-file=/etc/x509/https/tls.crt --https-certificate-key-file=/etc/x509/https/tls.key
    network_mode: "host"
    depends_on:
      - postgressvc



  postgressvc:
    image: postgres:10.21-alpine
    user: '1000:1000'
    container_name: "kc_postgres"
    environment:
      - POSTGRES_DB=keycloak
      - POSTGRES_USER=KcUser
      - POSTGRES_PASSWORD=KcPass
    volumes:
      - ./pgdta:/var/lib/postgresql/data
      - "/etc/timezone:/etc/timezone:ro"
      - "/etc/localtime:/etc/localtime:ro"
      - "/etc/passwd:/etc/passwd:ro"
    network_mode: "host"

It runs fine and I can get to admin console https://localhost:8443/auth/admin

I can also add new realm and users. However I do not see any data in postgres. If I make change in docker-compose file and restart, all the realms and users are lost

Exact same postgres setup works fine with image: jboss/keycloak:16.1.1

What setup am I missing for keycloak 18 ?


Solution

  • Keycloak from version 17 has major changes (it is based on the Quarkus) and also config has been changed. So don't use config, which is working with Keycoak 16, but check the current Keycloak doc, e.g. https://www.keycloak.org/server/containers

    You will find that DB env variables are now:

    KC_DB_URL,KC_DB_USERNAME,KC_DB_PASSWORD,...
    

    Also other env variables have been changed, so it is not only about DB env variables.