services: keycloak: container_name: baeldung-keycloak image: quay.io/keycloak/keycloak:26.4 command: - start-dev - --import-realm ports: - "8080:8080" volumes: - ./keycloak/:/opt/keycloak/data/import/ - keycloak_data:/opt/keycloak/data - ./keycloak/themes:/opt/keycloak/themes environment: KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_ADMIN_PASSWORD} KC_HTTP_PORT: 8080 KC_HOSTNAME_URL: http://localhost:8080 KC_HOSTNAME_ADMIN_URL: http://localhost:8080 KC_HOSTNAME_STRICT_BACKCHANNEL: true extra_hosts: - "host.docker.internal:host-gateway" healthcheck: test: ['CMD-SHELL', '[ -f /tmp/HealthCheck.java ] || echo "public class HealthCheck { public static void main(String[] args) throws java.lang.Throwable { System.exit(java.net.HttpURLConnection.HTTP_OK == ((java.net.HttpURLConnection)new java.net.URL(args[0]).openConnection()).getResponseCode() ? 0 : 1); } }" > /tmp/HealthCheck.java && java /tmp/HealthCheck.java http://localhost:8080/auth/health/live'] interval: 5s timeout: 5s retries: 20 postgres: image: postgres:16 container_name: frisbyee-postgres ports: - "5432:5432" environment: POSTGRES_DB: frisbyee POSTGRES_USER: frisbyee_user POSTGRES_PASSWORD: secret volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data: keycloak_data: version: "3.9"