У меня есть приложение для весенней загрузки. Контейнер Docker не имеет разрешения на создание файла.
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ADD /build/libs/file-upload-service-2.0.0.jar app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
docker build -t file-upload-service .
docker run -d --name file-upload-service -p 9104:9104 file-upload-service:latest
sudo chown -R root:docker /home/storage/
sudo chmod -R 777 /home/storage/
При работе с java -jar
приложение может создать файл.
Файл файл = новый файл (путь); file.canWrite () вернуть false
А каково значение переменной path
? Это /home/storage
?
/home/storage/sajib.png
ОК. Вы ожидаете, что этот файл будет получен с вашего хост-компьютера. В то время как код пытается найти файл в контейнере докера. Вам нужно будет смонтировать том хост-машины, чтобы он заработал.
Дай мне написать ответ, чтобы объяснить это.
Привет, @GolamMazidsajib, я пытаюсь добиться того же, но ни одно объяснение не помогло мне, по какой-то причине у меня ошибка 400 и MissingServletRequestPartException: Required request part 'file' is not present
, это происходит только в докере, и у меня есть пользователь root, у вас есть подсказка? Спасибо!
Вы ожидаете, что ваш код внутри контейнера докеров найдет файл в файловой системе вашего хоста. Контейнер докера полностью содержит (как следует из названия) среду выполнения, которая имеет свою собственную файловую систему, сеть и т. д. Вы не можете напрямую получить доступ к файловой системе хоста из контейнера докеров. пока не у вас есть некоторые необходимые конфигурации (монтирование) в вашей команде docker run ..
или в команде compose файл.
Вам нужно будет смонтировать том /home/storage
внутри контейнера докеров для чтения / записи из / в это место из контейнера. Для этого после изменения разрешений файловой системы на вашем хосте (которые у вас уже есть) используйте следующую команду запуска для запуска контейнера:
docker run -d --name file-upload-service -v /home/storage:/home/storage -p 9104:9104 file-upload-service:latest
Флаг -v
в приведенной выше команде указывает докеру смонтировать каталог /home/storage
хост-машины (левая сторона :
) в каталог /home/storage
контейнера (правая сторона :
). Вы можете изменить эти каталоги по своему усмотрению.
Какое исключение возникает при попытке создать файл / папку?