如果我使用
在主机上运行应用程序,则我的应用程序可以正常运行mvn spring-boot:run
但是当我在docker上部署它时,它不起作用,并且出现此错误:
严重:路径为[]的Servlet [dispatcherServlet]的Servlet.service()抛出异常[请求处理失败;嵌套的异常是org.thymeleaf.exceptions.TemplateInputException:解决模板“ / store / index”时出错,模板可能不存在,或者任何配置的模板解析器都无法访问该模板],其根本原因是org.thymeleaf.exceptions.TemplateInputException:错误解析模板“ / store / index”,则该模板可能不存在,或者任何已配置的模板解析器都无法访问该模板
但是,如果我输入受Spring安全性控制的URL:http:localhost:8080 / login,则会正常呈现模板。似乎是权限问题,但我不确定。
这是我的Dockerfile:
FROM openjdk
VOLUME /tmp
RUN touch engdevcommerce.jar
COPY target/engdevcommerce.jar engdevcommerce.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/engdevcommerce.jar"]
解决方案: 原来我遇到的问题与docker部署无关。我在主机上运行了jar文件,但遇到了同样的错误。 问题是,在控制器方法中返回视图URL的地方,我从这样的斜杠开始:“ / ... / ...”。当应用程序打包为.jar文件时,spring不会以双斜杠加载视图。我必须在URL开头的每一个我返回ModelAndView的位置以及在HTML文件上的th:insert标签处都删除斜杠字符。
此链接对我有很大帮助: spring-boot-thymeleaf-not-resolving-fragments-after-packaging
答案 0 :(得分:0)
将本地index
目录添加到dockerfile中,这样它将创建/store
并将index
目录复制到/store
中,那么您的docker vm将具有/store/index
您本地index
目录中的内容
...
...
ADD <local-index-directory> /store
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-
jar","/engdevcommerce.jar"]
答案 1 :(得分:0)
始终首先使用“ java -jar your_app_name.jar”命令检查应用程序执行情况! 通常,通过检查以下3点,可以很大程度上解决此问题-