Bitnami Keycloak生产模式KEYCLOAK_ENABLE_TLS环境变量未生效
问题说明
生产模式部署bitnami/keycloak:18时,已配置KEYCLOAK_ENABLE_TLS=true,启动时仍报如下错误,提示未开启TLS:
ERROR ==> You need to have TLS enabled. Please set the KEYCLOAK_ENABLE_TLS variable to true
原部署docker-compose配置如下:
version: '2' services: postgresql: image: docker.io/bitnami/postgresql:11 environment: # ALLOW_EMPTY_PASSWORD is recommended only for development. - ALLOW_EMPTY_PASSWORD=yes - POSTGRESQL_USERNAME=bn_keycloak - POSTGRESQL_DATABASE=bitnami_keycloak volumes: - 'postgresql_data:/bitnami/postgresql' keycloak: image: docker.io/bitnami/keycloak:18 environment: - KEYCLOAK_ENABLE_TLS=true - KEYCLOAK_PRODUCTION=true - KEYCLOAK_TLS_TRUSTSTORE_FILE=/opt/bitnami/keycloak/certs/truststore.jks - KEYCLOAK_TLS_KEYSTORE_FILE=/opt/bitnami/keycloak/certs/server.jks - KEYCLOAK_TLS_TRUSTSTORE_PASSWORD=password - KEYCLOAK_TLS_KEYSTORE_PASSWORD=password volumes: - ./server.jks:/opt/bitnami/keycloak/certs/server.jks - ./server.jks:/opt/bitnami/keycloak/certs/truststore.jks depends_on: - postgresql ports: - "80:8080" volumes: postgresql_data: driver: local
原启动日志:
keycloak_1 | keycloak 09:52:35.97 Welcome to the Bitnami keycloak container keycloak_1 | keycloak 09:52:35.98 keycloak_1 | keycloak 09:52:35.99 INFO ==> ** Starting keycloak setup ** keycloak_1 | keycloak 09:52:36.03 INFO ==> Validating settings in KEYCLOAK_* env vars... keycloak_1 | keycloak 09:52:36.03 ERROR ==> You need to have TLS enabled. Please set the KEYCLOAK_ENABLE_TLS variable to true
根因分析
报错由两个配置写法问题共同导致:
- 原配置中
KEYCLOAK_TLS_TRUSTSTORE_FILE一行末尾存在多余的尾随空格,docker-compose解析数组格式的环境变量时出现错位,部分环境变量未被正确注入容器 - YAML语法会将未加引号的
true/false识别为布尔类型,部分docker-compose版本传递布尔值时会出现类型转换异常,容器内启动脚本做字符串匹配校验时,读取到的值不是预期的字符串"true",判定校验不通过 - 额外问题:启用TLS后Keycloak默认HTTPS监听端口为8443,原配置仅映射了8080(HTTP端口),即使校验通过也无法正常访问HTTPS服务
修复方案
- 将环境变量从短横杠数组格式改为键值对格式,所有值显式添加双引号,强制按字符串类型解析,删除所有行尾多余空白字符
- 给挂载的证书文件添加只读权限标记,避免容器意外修改证书
- 添加8443端口映射,匹配HTTPS默认监听端口
修正后的可用配置如下:
version: '2' services: postgresql: image: docker.io/bitnami/postgresql:11 environment: # 注意:ALLOW_EMPTY_PASSWORD仅适用于开发环境 - ALLOW_EMPTY_PASSWORD=yes - POSTGRESQL_USERNAME=bn_keycloak - POSTGRESQL_DATABASE=bitnami_keycloak volumes: - 'postgresql_data:/bitnami/postgresql' keycloak: image: docker.io/bitnami/keycloak:18 environment: KEYCLOAK_ENABLE_TLS: "true" KEYCLOAK_PRODUCTION: "true" KEYCLOAK_TLS_TRUSTSTORE_FILE: "/opt/bitnami/keycloak/certs/truststore.jks" KEYCLOAK_TLS_KEYSTORE_FILE: "/opt/bitnami/keycloak/certs/server.jks" KEYCLOAK_TLS_TRUSTSTORE_PASSWORD: "password" KEYCLOAK_TLS_KEYSTORE_PASSWORD: "password" volumes: - ./server.jks:/opt/bitnami/keycloak/certs/server.jks:ro - ./server.jks:/opt/bitnami/keycloak/certs/truststore.jks:ro depends_on: - postgresql ports: - "8443:8443" # 生产环境建议移除HTTP端口映射,仅保留HTTPS访问 # - "80:8080" volumes: postgresql_data: driver: local
重新部署前执行docker-compose down(需保留已有业务数据请勿加-v参数),再执行docker-compose up -d启动即可,启动后可通过https://<服务器IP>:8443访问Keycloak服务。
注:当前配置中使用固定密码、空数据库密码、复用密钥库文件作为信任库均为开发环境简化配置,生产环境请按安全规范调整。
内容的提问来源于stack exchange,提问作者Shresh Maharjan
相关产品推荐
相关产品推荐

