在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_PATH
variables需要正确设置,但是当我运行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/