Загрузка файла докер-контейнером

У меня есть приложение для весенней загрузки. Контейнер 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 приложение может создать файл.

Какое исключение возникает при попытке создать файл / папку?

Saqib Ahmed 02.05.2018 13:21

Файл файл = новый файл (путь); file.canWrite () вернуть false

GolamMazid Sajib 02.05.2018 13:27

А каково значение переменной path? Это /home/storage?

Saqib Ahmed 02.05.2018 13:36

/home/storage/sajib.png

GolamMazid Sajib 02.05.2018 13:37

ОК. Вы ожидаете, что этот файл будет получен с вашего хост-компьютера. В то время как код пытается найти файл в контейнере докера. Вам нужно будет смонтировать том хост-машины, чтобы он заработал.

Saqib Ahmed 02.05.2018 13:40

Дай мне написать ответ, чтобы объяснить это.

Saqib Ahmed 02.05.2018 13:42

Привет, @GolamMazidsajib, я пытаюсь добиться того же, но ни одно объяснение не помогло мне, по какой-то причине у меня ошибка 400 и MissingServletRequestPartException: Required request part 'file' is not present, это происходит только в докере, и у меня есть пользователь root, у вас есть подсказка? Спасибо!

Dimitri Kopriwa 03.04.2020 16:53
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
4
7
9 385
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема

Вы ожидаете, что ваш код внутри контейнера докеров найдет файл в файловой системе вашего хоста. Контейнер докера полностью содержит (как следует из названия) среду выполнения, которая имеет свою собственную файловую систему, сеть и т. д. Вы не можете напрямую получить доступ к файловой системе хоста из контейнера докеров. пока не у вас есть некоторые необходимые конфигурации (монтирование) в вашей команде 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 контейнера (правая сторона :). Вы можете изменить эти каталоги по своему усмотрению.

Другие вопросы по теме