Gradle在Docker容器内运行失败但容器外可正常运行问题求助
故障根因
该报错是Docker容器内的Java运行环境缺失默认SSL根证书信任库文件导致的,Gradle拉取远程依赖时需要初始化HTTPS连接的SSL上下文,找不到对应的信任库文件就会触发无明确路径的FileNotFoundException。
宿主环境的JDK默认自带完整的cacerts证书库,也预装了系统根证书包,所以容器外运行不会出现该问题。
解决方案
- 方案1:给容器基础镜像安装根证书包
若使用Debian/Ubuntu系基础镜像,在Dockerfile中添加以下配置:
若使用CentOS/RHEL系基础镜像,添加以下配置:RUN apt-get update && apt-get install -y ca-certificates-java && update-ca-certificatesRUN yum install -y ca-certificates java-11-openjdk-headless && update-ca-trust force-enable - 方案2:手动指定信任证书路径
如果你已有可用的cacerts文件,可在执行Gradle命令时追加JVM参数指定证书位置:./gradlew clean -s -Djavax.net.ssl.trustStore=/你的证书存储路径/cacerts -Djavax.net.ssl.trustStorePassword=changeit - 方案3:替换为完整版JDK镜像
部分高度精简的JDK镜像会默认删除cacerts文件减小体积,直接替换为官方完整版JDK基础镜像即可解决该问题。
内容的提问来源于stack exchange,提问作者rocksnslopes
相关产品推荐
相关产品推荐

