Keycloak 20.x docker 映像无法启动 (docker-compose)

Sam*_*Sam 2 docker keycloak docker-compose

我正在使用 docker swarm 并设置 keycloak 20 的新副本,但遇到了一些问题。我一直在使用旧版本的 Keycloak,但似乎启动配置等已经改变,特别是对于 docker。

我的 docker-compose.yml 目前看起来像这样:

keycloak:
  image: quay.io/keycloak/keycloak:20.0
  environment:
    TZ: '...'
    KC_HOSTNAME: localhost
    KC_HOSTNAME_PORT: 80
    KC_HOSTNAME_STRICT_BACKCHANNEL: "true"
    KC_DB: mysql
    KC_DB_URL: jdbc:mysql://mysql:3306/keycloak
    KC_DB_USERNAME: ${KEYCLOAK_DB_USER}
    KC_DB_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
    KEYCLOAK_ADMIN: admin
    KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD}
    KC_HEALTH_ENABLED: "true"
    KC_LOG_LEVEL: info
  volumes:
    - ./keycloak_realms:/realm-config # <- Unclear???
  depends_on:
    - mysql-db
  networks:
    - mysql-net
    - web
  healthcheck:
    test: [ "CMD", "curl", "-f", "http://localhost:8080/health/ready" ]
    interval: 15s
    timeout: 2s
    retries: 15
  deploy:
    resources:
      limits:
        cpus: '0.50'
        memory: 512m
Run Code Online (Sandbox Code Playgroud)

当我启动容器时,我看到的只是kc.shshell 脚本的文档。

我也找不到有关新卷位置等的文档。

总的来说,我遇到了缺乏文档和如何调试的问题。

有谁有关于配置的更多信息以及这里出了什么问题吗?

lar*_*sks 14

您的配置基本上是正确的,但您需要为kc.sh命令提供一个参数。正如您从帮助输出中看到的,您的选项是:

build                   Creates a new and optimized server image.
start                   Start the server.
start-dev               Start the server in development mode.
export                  Export data from realms to a file or directory.
import                  Import data from a directory or a file.
show-config             Print out the current configuration.
tools                   Utilities for use and interaction with the server.
Run Code Online (Sandbox Code Playgroud)

你可能想要start-dev,所以:

services:
  keycloak:
    image: quay.io/keycloak/keycloak:20.0
    command: start-dev
    .
    .
    .
Run Code Online (Sandbox Code Playgroud)

我无法让事情运行KC_DB: mysql(这导致了错误Unknown database: MySQL),但使用 MariaDB 工作正常。以下配置成功启动Keycloak:

services:
  mysql:
    image: docker.io/mariadb:10
    environment:
      MARIADB_DATABASE: ${KEYCLOAK_DB_NAME}
      MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
      MARIADB_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
      MARIADB_USER: ${KEYCLOAK_DB_USER}

  keycloak:
    image: quay.io/keycloak/keycloak:20.0
    environment:
      KC_HOSTNAME: localhost
      KC_HOSTNAME_PORT: 8080
      KC_HOSTNAME_STRICT_BACKCHANNEL: "true"
      KC_DB: mariadb
      KC_DB_URL: jdbc:mariadb://mysql:3306/${KEYCLOAK_DB_NAME}?characterEncoding=UTF-8
      KC_DB_USERNAME: ${KEYCLOAK_DB_USER}
      KC_DB_PASSWORD: ${KEYCLOAK_DB_PASSWORD}
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: ${KEYCLOAK_PASSWORD}
      KC_HEALTH_ENABLED: "true"
      KC_LOG_LEVEL: info
    healthcheck:
      test: [ "CMD", "curl", "-f", "http://localhost:8080/health/ready" ]
      interval: 15s
      timeout: 2s
      retries: 15
    command: start-dev
    ports:
      - 8080:8080
Run Code Online (Sandbox Code Playgroud)

通过该配置,我可以通过 http://localhost:8080 访问 keycloak 并登录管理控制台。


Tho*_*ann 6

仅供参考:在 Keycloak 21 中使用了新的微基础映像,因此“curl”不再包含在映像中,因此健康检查将不再起作用。

如果 Keycloak 配置没有 HTTPS,我的解决方法是这样的:

#!/bin/bash
exec 3<>/dev/tcp/localhost/8080

echo -e "GET /auth/health/ready HTTP/1.1\nhost: localhost:8080\n" >&3

timeout --preserve-status 1 cat <&3 | grep -m 1 status | grep -m 1 UP
ERROR=$?

exec 3<&-
exec 3>&-

exit $ERROR
Run Code Online (Sandbox Code Playgroud)