10

I run keycloak standalone using a command for docker docker run -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:15.0.2

How to mount a volume to save the data, after container is stopped?

Dennis Meissel
  • 1,825
  • 1
  • 21
  • 33

2 Answers2

5

For the production:

In the production environment Keycloak should be connected to a real database (mariadb, mssql, mysql, oracle, postgres). The data is stored there, thus there is no need to store anything running in the container.

For the development:

Keycloak comes with its own embedded Java-based relational database called H2. The data is stored in /opt/jboss/keycloak/standalone/data/ inside the container.

To start the container with a mounted volume you need:

1. Create a folder with read-write permissions:

mkdir -m 777 ./keycloak_data

2. Start the container with the mounted volume:

docker run -v ./keycloak_data:/opt/jboss/keycloak/standalone/data/ -p 8080:8080  -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:15.0.2

Note that if you mount the volume, the KEYCLOAK_USER and KEYCLOAK_PASSWORD will only be considered by the first start of the container, so to start the container again just use:

docker run -v ./keycloak_data:/opt/jboss/keycloak/standalone/data/ -p 8080:8080 quay.io/keycloak/keycloak:15.0.2
Dennis Meissel
  • 1,825
  • 1
  • 21
  • 33
  • 2
    From Keycloak doc `The H2 database is not very viable in high concurrency situations`. You should to use external supported DB in real production env, not H2. So this answer is OK only for "dev" env. – Jan Garaj Nov 02 '21 at 15:33
  • 2
    In keycloak 21 (not sure when it changed), the new path to map for development is: ```/opt/keycloak/data/h2``` – mdryden Apr 26 '23 at 15:57
5

working docker-compose.yml

version: "3.7"

volumes:
  keycloak:

services:

  keycloak:
    image: quay.io/keycloak/keycloak:18.0.2
    ports:
      - 8080:8080
    environment:
      - KEYCLOAK_ADMIN=admin
      - KEYCLOAK_ADMIN_PASSWORD=admin
    volumes:
      - keycloak:/opt/keycloak/data/
    restart: always
    command:
      - "start-dev"
Duc Trung Mai
  • 2,141
  • 1
  • 24
  • 23