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

Posted

技术标签:

【中文标题】在 Docker Toolbox 中运行 Java 应用程序时出现 SunCertPathBuilderException【英文标题】:SunCertPathBuilderException when running a Java application in Docker Toolbox 【发布时间】:2018-02-11 18:46:27 【问题描述】:

我有一个 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 并设法将证书添加到 Docker 映像中的 /etc/ssl/certs/java/cacerts/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】:

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

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

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

【讨论】:

以上是关于在 Docker Toolbox 中运行 Java 应用程序时出现 SunCertPathBuilderException的主要内容,如果未能解决你的问题,请参考以下文章

尝试在运行 docker-toolbox 的 Windows 上使用 docker-compose 在 docker 容器内运行 webpack-dev-server 时出现“来自服务器的空回复”

windows 2008 开机启动 Docker Toolbox 并运行容器

如何配置 com.spotify.dockerfile-maven-plugin 在 Docker Toolbox 上运行?

Docker Toolbox on Windows 7

Docker Toolbox on Windows 7

Docker Toolbox Tutorial Client.Timeout 在等待标头时超出