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

问题描述 投票:0回答:3

我正在使用 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

当我启动容器时,我看到的只是

kc.sh
shell 脚本的文档。

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

总的来说,我遇到的问题是缺乏文档以及如何调试。

有没有人了解有关配置以及这里出了什么问题的更多信息?

docker docker-compose keycloak
3个回答
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.

您可能想要

start-dev
,所以:

services:
  keycloak:
    image: quay.io/keycloak/keycloak:20.0
    command: start-dev
    .
    .
    .

我无法使用

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

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


7
投票

仅供参考:在 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
    

0
投票
以前我使用的是jboss/keycloak,然后我们转移到bitnami/keycloak,我的所有数据都存在于bitnami的jboss/keycloak中,但我无法在quay.io/keycloak/keycloak中看到相同的数据

版本:'2.4' 服务: adi-auth: 图片:quay.io/keycloak/keycloak 端口: - '8080:8080' - '6379:6379' 依赖于取决于: adi-auth-db: 条件:服务健康 环境: - KC_DB_VENDOR=POSTGRES - KC_DB_ADDR=adi-auth-db - KC_DB_DATABASE=auth-db - KC_DB_USER=postgres - KC_DB_SCHEMA=公共 - KC_DB_PASSWORD=#### - KEYCLOAK_ADMIN=管理员 - KEYCLOAK_ADMIN_PASSWORD=管理员 - 'JAVA_OPTS_APPEND=-Dkeycloak.profile.feature.upload_scripts=启用 -Dkeycloak.profile.feature.token_exchange=启用 -Dkeycloak.profile.feature.admin_fine_grained_authz=启用' 健康检查: 测试:['CMD','curl','-f','http://localhost:9990'] 间隔:30秒 超时时间:10秒 重试次数:3 卷: - ./keycloak/realm-configs/realm.json:/opt/keycloak/data/import/realm.json 命令:['start-dev', '--import-realm'] adi-auth-db: 图片:postgres:13.1-alpine 环境: - POSTGRES_PASSWORD=####### - POSTGRES_DB=auth-db - PGDATA=/var/lib/postgresql/data/pgdata 卷: - ./postgres-auth-data:/var/lib/postgresql/data/pgdata 端口: - '8000:5432' 健康检查: 测试:['CMD-SHELL','pg_isready -U postgres'] 间隔:10秒 超时:5秒 重试次数:5 adi-后端数据库: 图片:postgres:13.1-alpine 环境: - POSTGRES_PASSWORD=########## - POSTGRES_DB=adi-后端-db - PGDATA=/var/lib/postgresql/data/pgdata # 命令:["postgres", "-c", "log_statement=all"] 卷: - ./postgres-api-data:/var/lib/postgresql/data/pgdata 端口: - '8001:5432' 健康检查: 测试:['CMD-SHELL','pg_isready -U postgres'] 间隔:10秒 超时:5秒 重试次数:5

邮件陷阱

邮件: 图片:mailhog/mailhog 端口: - 8025:8025 - 1025:1025

© www.soinside.com 2019 - 2024. All rights reserved.