现象:CAS banner 后持续 ERROR Could not determine local host name UnknownHostException: <容器短ID>: Temporary failure in name resolution。 根因:容器 hostname 默认为容器短 ID,当前网络环境下 /etc/hosts 未含该行、 内网 DNS 亦无法解析,InetAddress.getLocalHost() 失败;连锁导致 CAS TicketIdSanitizationUtils 静态初始化抛 ExceptionInInitializerError(票据日志带病)。 修复:ENTRYPOINT 改为 entrypoint.sh,启动前把 hostname 兜底写入 /etc/hosts (已存在则跳过),再 exec java -jar cas.war。不依赖 projman 侧改动,任何部署方式均生效。
现象:java -jar cas.war 启动即抛 NoSuchMethodError: ThreadContext.getThreadContextMap, WAR 的 WEB-INF/lib 同时存在 log4j api/core/slf4j-impl 的 2.7 与 2.12.1 两套。 根因:spring-boot-dependencies 1.5.18 经内嵌 log4j-bom 管理 log4j 版本,默认 2.7; BOM import 方式下 pom 覆盖 <log4j2.version> 属性不生效(属性在导入 BOM 自身上下文解析), maven 仍解析出 2.7 全套,与 overlay war 物理自带的 2.12.1 混包,类加载顺序决定成败。 修复:dependencyManagement 最前(先声明者优先)import log4j-bom 2.12.1, 全套 log4j 钉死 2.12.1,与 overlay war 内物理版本一致,war 内仅剩单套。
- 复制 CAS 5.3.16 overlay 源码(src/、pom.xml、etc/cas/config/log4j2.xml、docker/cas.properties)及本地构建辅助(build.cmd/build.sh/maven-settings.xml) - build.yml:maven 产物由 jar 改为 war(cp cas.war app.jar),CI 内源码构建,摆脱 174MB war blob 入库 - Dockerfile:CAS 专用镜像(自签名 keystore 8443 HTTPS + 内置 cas.properties/log4j2.xml + JAVA_OPTS 注入) - pom.xml:移除 sonatype/shibboleth 外网仓库,依赖全部经 nexus maven-public 解析 - 前端 front/ 不入库(CasSsoFront 仓库独立发布)