我曾经在openjdk:10-slim
docker 镜像上运行我的应用程序,一切都很顺利。
然后我迁移到了一个使用Jlink构建的自定义JDK,以下是Dockerfile:
FROM openjdk:10-jdk-slim AS jdkBuilder
RUN $JAVA_HOME/bin/jlink \
--module-path /opt/jdk/jmods \
--verbose \
--add-modules java.base,java.logging,java.xml,java.xml.bind,java.sql,jdk.unsupported,java.naming,java.desktop,java.management,java.security.jgss,java.security.sasl,jdk.crypto.cryptoki,jdk.crypto.ec,java.instrument,jdk.management.agent \
--output /opt/jdk-minimal \
--compress 2 \
--no-header-files
FROM debian:9-slim
COPY --from=jdkBuilder /opt/jdk-minimal /opt/jdk-minimal
ENV JAVA_HOME=/opt/jdk-minimal
COPY target/*.jar /opt/
CMD $JAVA_HOME/bin/java $JAVA_OPTS -jar /opt/*.jar
一般情况下都正常工作,但在使用AWS S3 SDK时出现以下异常:
com.amazonaws.SdkClientException: Unable to execute HTTP request: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
我猜测这些证书(或访问它们的方式)是由一个缺失的包提供的,而我没有包含它。
我做了一些调查,但没有找到任何关于它的信息。我尝试添加与安全或SSL相关的任何模块,但都没有成功。
有人遇到过这个问题并知道需要添加哪个模块吗?作为一种解决方法,我回退到
openjdk:10-slim
,但我想使用jlink
因为它可以使我的镜像更小。