首页 > 解决方案 > SecurityException 在 Docker 容器中使用 Centos/OpenJDK11/Tomcat 加载 JAAS 配置文件

问题描述

我正在尝试将现有的 Web 应用程序从 Windows 移动到在 Docker 容器中运行。我以 Centos 7 和 OpenJDK 11 作为起点。将 Tomcat 9 放在上面并开始正常。我开始为我的 Web 应用程序添加组件以及我们当前 Windows 部署的所有组件(war 文件、jaas.config、setenv.sh 等)。docker 容器启动正常,但是当我尝试登录时出现以下错误。

04-Jan-2021 13:27:30.381 SEVERE [http-nio-8080-exec-9] org.apache.catalina.realm.JAASRealm.authenticate Unexpected error
    java.lang.SecurityException: java.io.IOException: /opt/tomcat/latest/conf/jaas.config
 (No such file or directory)
        at java.base/sun.security.provider.ConfigFile$Spi.<init>(ConfigFile.java:137)

我停止容器并以交互模式启动我确认文件位于该位置。

root@eac3366e9b83:/# ls -ltr /opt/tomcat/latest/conf/
total 236
-rwxrwxrwx 1 root   root      107 Jul 13  2019 jaas.config

什么可能导致问题?

标签: dockerfilecentos7jaasopenjdk-11

解决方案


问题是 jaas.config 文件和 setenv.sh 从 windows 复制到 docker 映像并包含 windows 行终止。因此,当tomcat 尝试加载jaas 配置文件时,名称末尾有多余的字符,并且在File.exists 中失败。修复文件内容后,身份验证模块加载正常。


推荐阅读