Как правильно обеспечить доступ к файлам в docker контейнере?
Есть Spring boot приложение, которое использует сертификаты находящиеся в /src/main/resources/cert
Есть обращение к этому каталогу и сертификатам:
@Value(value = "classpath:cert/Key.dat")
Resource keyPath;
@Value(value = "classpath:cert/CAs.json")
public Resource casJSONFileName;
@Value(value = "classpath:cert/")
public Resource certificatesStoragePath;
далее через getPath() обращаюсь и получаю необходимые сертификаты:
certificatesStoragePath.getURL().getPath()
и все работает. Но если собираю jar файл в docker контейнере и запускаю, не видит файлы.
Где и как правильно прописать путь к сертификатам, чтобы в docker контейнере их нормально видело?
dockerfile прилагаю:
FROM openjdk:8 as build
RUN apt-get update
RUN apt-get install -y maven
WORKDIR /service_info
ADD pom.xml /service_info/pom.xml
ADD src /service_info/src
ADD src/main/resources/cert /service_info/src/main/resources/cert
RUN ["mvn", "dependency:resolve"]
RUN ["mvn", "-N", "io.takari:maven:wrapper", "-Dmaven=4.0.0"]
RUN ["mvn", "clean", "install"]
ENTRYPOINT ["java","-jar","target/service_info-1.0-SNAPSHOT.jar"]
P.S: Также заметил, что путь к каталогу с сертификатами в jar файле выглядит так:
file:/service_info/target/service_info-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/cert/
может в этом проблема?
Новые дополнения:
File currDir = new File("src/main/resources/cert");
keyPath = currDir.getAbsolutePath()+"/Key-6.dat";
casJSONFileName = currDir.getAbsolutePath()+"/CAs.json";
certificatesStoragePath = currDir.getAbsolutePath();
Таким образом получилось добраться до сертификатов. Но на сколько это корректно?
Вторая проблема: Библиотека, которая работает с этими сертификатами вызывает ошибку, если docker контейнер собрать через Jenkins.
[error occurred during error reporting , id 0xb]
# http://bugreport.java.com/bugreport/crash.jsp
# See problematic frame for where to report the bug.
# If you would like to submit a bug report, please visit:
# The crash happened outside the Java Virtual Machine in native code.
# /tmp/EUSign-x64-1.3.143/hs_err_pid1.log
# An error report file with more information is saved as:
# Core dump written. Default location: /tmp/EUSign-x64-1.3.143/core or core.1
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.201-b09 mixed mode linux-amd64 compressed oops)
# Problematic frame:
# C [libc.so.6+0x18e5a1]
# JRE version: Java(TM) SE Runtime Environment (8.0_201-b09) (build 1.8.0_201-b09)
Если просто собрать контейнер без Jenkins, все работает нормально. Это проблема с jenkin, docker или из-за нахождения библиотеки в jar?