在Docker Toolbox中运行Java应用程序时出现SunCertPathBuilderException

时间:2017-09-03 08:34:42

标签: java docker https windows-7 docker-toolbox

我有一个Spring Boot Java应用程序,我想在Docker容器中运行它。应用程序通过HTTPS与内部网络上的其他服务进行通信,但是当我运行Docker容器时,我收到以下异常(由HTTPS连接引起):

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

我的开发机器上也有同样的异常,我使用this tutorial修复了这个异常。

我尝试了什么

  • 许多建议指出需要正确设置DOCKER_CERT_PATH变量,但当我运行docker-machine env default时,我发现它指向C:\Users\username\.docker\machines\machine\default
  • 我尝试获取证书并使用this advice
  • 将其放入此文件夹
  • 我尝试添加-Dtrust_all_cert=true Java选项以禁用证书检查
  • 我尝试使用this settings
  • org.spotify.dockerfile-maven-plugin切换到org.spotify.docker-maven-plugin
  • 我关注this tutorial并设法将证书添加到/etc/ssl/certs/java/cacerts,并添加到Docker镜像中的/usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts

这些解决方案都没有奏效,不幸的是。

我的问题

我该怎么做才能摆脱这种异常?

我的Dockerfile(应用之前的解决方案后)

FROM openjdk:8-jdk-alpine
# to enable file writes
VOLUME /tmp
ADD target/trip-force-0.1.0.jar app.jar

# java cacerts
COPY ./res/timur.domain.local.cer /timur.domain.local.cer
ENV CACERTS  /etc/ssl/certs/java/cacerts
RUN keytool -noprompt -import -alias timur -keystore ${CACERTS} -file /timur.domain.local.cer

ENV JAVA_OPTS="-Dtrust_all_cert=true"
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom  -jar /app.jar" ]

1 个答案:

答案 0 :(得分:0)

最终诀窍是解决方案,我可能应该在开始时尝试过,因为它解决了我的开发机器上的问题。

使用this tutorial(并从here下载InstallCert.java文件)我刚刚在Dockerfile中使用此命令将生成的jssecacerts文件复制到Docker镜像中:

COPY ./res/jssecacerts /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/