У меня есть файлы на томе, которые я хочу, чтобы пользователи могли загружать с помощью сервлета в контейнер Tomcat.
Я создал том и контейнер
$ sudo docker volume create tomcat-volume
$ docker run -d -p 8080:8080 --name tomcat \
-v tomcat-volume:/usr/local/tomcat \
tomcat:9.0.10-jre8
и разверните мой .war
файл через localhost:8080
в браузере (после редактирования conf/tomcat-users.xml
и webapps/manager/META-INF/context.xml
для получения прав доступа).
sudo docker volume inspect tomcat-volume
заявляет, что точка монтирования равна /var/lib/docker/volumes/tomcat-volume/_data/
Каталог temp
уже содержит saveToDelete.tmp
, и я добавил два пользовательских файла, чтобы быть уверенным. Соответствующий код из моего сервлета:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.append("<!DOCTYPE html>\n");
pw.append("<html>\n");
pw.append("<body>\n");
String link;
File[] files = (new File("/usr/local/tomcat/temp/")).listFiles();
for(File f: files) {
link = String.format("<a href=\"%s\" download>%s</a>", f.getAbsolutePath(), f.getName());
pw.append(link);
pw.append("<br>\n");
}
pw.append("</body>\n");
pw.append("</html>\n");
}
, который генерирует:
<!DOCTYPE html>
<html>
<body>
<a href="/usr/local/tomcat/temp/safeToDelete.tmp" download>safeToDelete.tmp</a><br>
<a href="/usr/local/tomcat/temp/hej.png" download>hej.png</a><br>
<a href="/usr/local/tomcat/temp/hej.html" download>hej.html</a><br>
</body>
</html>
, указывающий, что у меня правильный адрес. Однако я не могу загрузить эти файлы, но получить 404 не найден. Я убедился, что файлы доступны для чтения всем:
$ sudo ls -l /var/lib/docker/volumes/tomcat-volume/_data/temp
-rw-r--r-- 1 root root 4 Apr 22 11:31 hej.html
-rw-r--r-- 1 root root 2962 Apr 22 11:31 hej.png
-rw-r--r-- 1 root root 0 Jun 20 2018 safeToDelete.tmp