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

我有一个Spring Boot Java应用程序,我想在一个Docker容器中运行。 应用程序通过HTTPS与内部networking上的另一个服务通信,但是当我运行Docker容器时,出现以下exception(由HTTPS连接引起):

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

我的开发机器上也有同样的exception,我在本教程中解决了这个问题 。

我试过了

  • 许多build议指出, DOCKER_CERT_PATHvariables需要正确设置,但是当我运行docker-machine env default ,我看到它指向C:\Users\username\.docker\machines\machine\default
  • 我试图获得证书,并把它放到这个文件夹使用这个build议
  • 我试着添加-Dtrust_all_cert=true Java选项来禁用证书检查
  • 我尝试从org.spotify.dockerfile-maven-plugin切换到org.spotify.docker-maven-plugin并使用此设置
  • 我遵循这个教程,并设法将这个证书添加到/etc/ssl/certs/java/cacerts以及Docker映像中的/usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts

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

我的问题

我该怎么办才能摆脱这个exception?

我的Dockerfile(应用以前的解决scheme之后)

 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" ] 

最后的诀窍是解决scheme,我可能应该在一开始尝试,因为这是解决我的开发机器上的问题。

使用本教程 (并从这里下载InstallCert.java文件),我只是在jssecacerts使用以下命令将生成的jssecacerts文件复制到Docker镜像中:

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