SunCertPathBuilderException при запуске приложения Java в Docker Toolbox

У меня есть Java-приложение Spring Boot, которое я хочу запустить внутри контейнера Docker. Приложение взаимодействует с другой службой во внутренней сети через HTTPS, но когда я запускаю контейнер Docker, я получаю следующее исключение (из-за соединения HTTPS):

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

У меня было такое же исключение и на моей машине разработки, которое я исправил, используя это руководство.

Что я пробовал

  • Во многих советах указывалось, что переменная DOCKER_CERT_PATH должна быть правильно установлена, но когда я запускаю docker-machine env default, я вижу, что она указывает на C:\Users\username\.docker\machines\machine\default.
  • Я попытался получить сертификат и положить его в эту папку, воспользовавшись этим советом
  • Я попытался добавить параметр -Dtrust_all_cert=true Java, чтобы отключить проверку сертификата.
  • Я попытался переключиться с org.spotify.dockerfile-maven-plugin на org.spotify.docker-maven-plugin с помощью настройки
  • Я выполнил это руководство и сумел добавить сертификат в /etc/ssl/certs/java/cacerts, а также /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/cacerts в образе Docker.

К сожалению, ни одно из этих решений не сработало.

Мой вопрос

Что мне делать, чтобы избавиться от этого исключения?

Мой 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" ]

person Adam Kučera    schedule 03.09.2017    source источник


Ответы (1)


Что, наконец, помогло, так это решение, которое я, вероятно, должен был попробовать в начале, поскольку именно оно устранило проблему на моей машине разработки.

Использование это руководство (и загрузив файл InstallCert.java из здесь), я просто скопировал сгенерированный jssecacerts внутри образа Docker с помощью этой команды в Dockerfile:

COPY ./res/jssecacerts /usr/lib/jvm/java-1.8-openjdk/jre/lib/security/
person Adam Kučera    schedule 03.09.2017