Как правильно обеспечить доступ к файлам в 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?


Ответы (0 шт):