Когда я запускаю свое приложение в контейнере Docker, пути к файлам портятсяLinux

Ответить Пред. темаСлед. тема
Anonymous
 Когда я запускаю свое приложение в контейнере Docker, пути к файлам портятся

Сообщение Anonymous »

Код: Выделить всё

public File convert(MultipartFile multipartFile) {
byte[] bytes;
try {
bytes = multipartFile.getBytes();
try (FileOutputStream fos = new FileOutputStream("files/" + multipartFile.getOriginalFilename())) {
fos.write(bytes);
}
} catch(IOException e) {
System.out.println("Exception when converting multipart file to array of bytes");
System.out.println(e.getCause());
System.out.println(e.getMessage());
}
return new File("files/" + multipartFile.getOriginalFilename());
}
У меня есть метод, который преобразует MultipartFile в File (из пакета .io). files/ — это каталог внутри базового каталога моего проекта. На моем локальном компьютере все работает нормально (ubuntu 22), но когда я запускаю приложение в контейнере докеров и вызываю этот метод, он выдает IOException:

Код: Выделить всё

file-exchange-web-1       | Exception when converting multipart file to array of bytes
file-exchange-web-1       | null
file-exchange-web-1       | files/zip.png (No such file or directory)
Вот что происходит, когда я пытаюсь получить доступ к этому файлу:

Код: Выделить всё

file-exchange-web-1       | java.io.FileNotFoundException: file [/apps/files/zip.png] cannot be resolved in the file system for checking its content length
Вот мой файл докеров:

Код: Выделить всё

FROM openjdk:21-slim

WORKDIR /apps
ARG JAR_FILE
COPY target/${JAR_FILE} /apps/app.jar
COPY /entrypoint.sh /apps/entrypoint.sh

RUN adduser --system servuser
RUN chmod +x /apps/entrypoint.sh
RUN chown -R servuser /apps

USER servuser
EXPOSE 8080 8080
CMD ["/apps/entrypoint.sh"]
Я понимаю, что dockerfile меняет рабочий каталог на /apps и меняет путь, но я не очень понимаю, что именно делает WORKDIR: где он создает каталог /apps, в каком каталоге в контейнере находится мое приложение и т. д. Я также слышал об использовании System.getProperty("user.dir"); но я не совсем понимаю, где мое приложение находится в контейнере, поэтому для меня это не имеет большого смысла.
Я погуглил концепцию точных каталогов, докер помещает приложение в контейнер, но на самом деле ничего не нашел это могло бы мне помочь.

Подробнее здесь: https://stackoverflow.com/questions/787 ... -messed-up
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»