我希望部署为战争ROOT.war
的Web应用程序具有对/var/www/html/static/images
的写权限,以便它可以将上载和转换后的图像写入该文件夹,以便Nginx可以静态地为其提供服务。当前,它不起作用,同时触发java.nio.file.FileSystemException
消息和Filesystem is read-only
异常。
但是文件系统不是只读的,并且状态良好。该文件夹已经更改为777。
其他信息: Tomcat安装程序在具有托管磁盘的Ubuntu 18.04 Azure VM上运行。该文件夹位于Ext4格式化的驱动器上
答案 0 :(得分:2)
让我们开始:chmod 777
非常适合测试,但是绝对不适合实际应用,您不应该习惯这种设置。在授予世界写权限之前,应正确设置所有者/组。
编辑:Tomcat邮件列表上也出现了类似的问题,Emmanuel Bourg指出Debian Tomcat被systemd沙盒化。阅读您的/usr/share/doc/tomcat9/README.Debian,其中包含以下段落:
Tomcat被systemd沙盒化,并且仅具有对 以下目录:
- / var / lib / tomcat9 / conf / Catalina(实际上是/ etc / tomcat9 / Catalina)
- / var / lib / tomcat9 / logs(实际上是/ var / log / tomcat9)
- / var / lib / tomcat9 / webapps
/ var / lib / tomcat9 / work(实际上是/ var / cache / tomcat9)
如果需要对其他目录的写访问权,请进行服务设置 必须被覆盖。这是通过创建overlay.conf文件来完成的 在/etc/systemd/system/tomcat9.service.d/中,包含:
[服务] ReadWritePaths = /路径/到/目录/
此后必须重新启动服务:
systemctl守护程序重新加载 systemctl重新启动tomcat9
编辑结束,继续解决无法解决OP问题的段落,但应保留在以下位置:
如果-经过测试的所有内容-Tomcat 应该对该目录具有写访问权,但没有该目录,则错误消息向我提出了一个假设:是否可能是
NFS的默认配置是root在该外部文件系统上没有任何权限(或者是否没有写权限?这是古老的历史内存)
如果这符合您所运行的条件,则应停止以root用户身份运行Tomcat,而应以非特权用户身份运行它。然后,您可以将有关目录的权限设置为可由您的tomcat用户写入,并由nginx读取,然后就可以完成。
以root身份运行Tomcat是灾难的根源:您不希望Internet上可用的进程以root身份运行。
如果这些条件不符合您的配置:请详细说明配置。对于以后可能会发现此问题/答案的其他人,我仍然坚持此说明。