我正在使用 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 脚本的文档。
我也找不到有关新卷位置等的文档。
总的来说,我遇到的问题是缺乏文档以及如何调试。
有没有人了解有关配置以及这里出了什么问题的更多信息?
您的配置基本正确,但您需要为
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 并登录管理控制台。
仅供参考:在 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
版本:'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
邮件陷阱