在Docker Swarm集群部署/迁移Keycloak时遇执行错误求助
Docker Swarm部署Keycloak遇到的两个问题
问题1:执行build命令失败
部署时触发build命令报错:
ERROR: Failed to execute the 'build' command. ERROR: No value present
问题2:Keycloak迁移时日志报错信息不明确
计划迁移Keycloak,但服务日志无法提供足够定位问题的有效信息。
当前配置文件
docker-compose.yml
version: '3.8' services: keycloak: image: registry.ccms-capgemini.fr/keycloak/keycloak:20.0 deploy: replicas: 1 # entrypoint: /opt/keycloak/bin/kc.sh start --auto-build command: - start environment: KC_HOSTNAME: ${KCLNAME} KC_HOSTNAME_PORT: ${DBPORT} KC_HOSTNAME_STRICT_HTTPS: "false" KC_DB: ${DBV} KC_DB_NAME: ${DBNAME} KC_DB_URL: ${DBHOST} KC_DB_USERNAME: ${DBUSER} KC_DB_PASSWORD: ${DBPASSWORD} KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN: admin KEYCLOAK_ADMIN_PASSWORD: admin KC_HEALTH_ENABLED: "true" KC_METRICS_ENABLED: "true" KC_LOG_LEVEL: ${KCLKLOG} KC_DB_SCHEMA: public KC_HTTPS_CLIENT_AUTH: request KC_HTTPS_PROTOCOLS: TLSv1.3,TLSv1.2 KC_FEATURES: authorization token-exchange docker impersonation scripts upload-scripts web-authn client-policies dynamic-scopes volumes: - ./configs/keycloak/conf:/opt/keycloak/conf - ./configs/keycloak/keystore:/opt/keycloak/conf/server.keystore - ./configs/keycloak/datas:/opt/keycloak/data/import ports: - "8098:8080"
.env文件
DBV=POSTGRES DBNAME=keycloak DBUSER=keycloak DBPASSWORD=xxxxxxxxxxxxxxxxxxxx KCLNAME=load_balancer_url DBHOST=RDS_db_url DBPORT=5432 PAF=true KCLKLOG=INFO JTO=-Dkeycloak.profile.feature.admin_fine_grained_authz=enabled
已尝试操作
- 测试多种部署命令组合
- 手动展开环境变量后执行部署
- 调整entrypoint配置(当前已注释)
问题排查建议
针对build命令失败问题
- 确保环境变量加载:Docker Swarm部署时,必须通过
--env-file .env参数指定环境变量文件,否则变量无法被注入到服务中。 - 删除重复环境变量:
docker-compose.yml中KEYCLOAK_ADMIN被重复定义两次,删除其中一个冗余项。 - 修正KC_FEATURES格式:Keycloak要求
KC_FEATURES为逗号分隔的字符串,而非多行列表,修改为:KC_FEATURES: "authorization,token-exchange,docker,impersonation,scripts,upload-scripts,web-authn,client-policies,dynamic-scopes" - 调整DB_URL格式:PostgreSQL的
KC_DB_URL需符合JDBC规范,格式应为jdbc:postgresql://RDS_db_url:5432/keycloak,需修正.env中的DBHOST值。 - 验证镜像可访问性:确认Swarm所有节点都能正常拉取
registry.ccms-capgemini.fr/keycloak/keycloak:20.0镜像,排查私有仓库权限或网络问题。
针对迁移日志不明确问题
- 提升日志级别:将
KC_LOG_LEVEL从INFO改为DEBUG,获取更详细的迁移过程日志。 - 自定义日志配置:在挂载的
./configs/keycloak/conf目录下添加log4j2.xml文件,指定迁移相关日志的输出规则。 - 手动执行迁移命令:进入容器内执行
/opt/keycloak/bin/kc.sh start --auto-build,直接查看控制台输出的实时错误信息。
内容的提问来源于stack exchange,提问作者K3forme
相关产品推荐
相关产品推荐

