如果我使用主机在我的主机上运行应用程序,我的应用程序工作正常
mvn spring-boot:run
但是当我在docker上部署它时,它不起作用,我收到此错误:
严重:Servlet [dispatcherServlet]的Servlet.service()与path []的上下文引发异常[请求处理失败;嵌套异常是org.thymeleaf.exceptions.TemplateInputException:解析模板“/ store / index”时出错,模板可能不存在,或者任何已配置的模板解析器可能无法访问,但根本原因是org.thymeleaf.exceptions.TemplateInputException:Error解析模板“/ store / index”时,模板可能不存在,或者任何已配置的模板解析器都可能无法访问
但如果我继续使用URL:http:localhost:8080 / login,它由spring security控制,正常呈现模板。似乎是一个许可问题,但我不确定。
这是我的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不会使用双斜杠加载视图。我必须在每个返回ModelAndView的地方删除url开头的斜杠字符,并且在我的html文件中插入标签。
这个链接对我帮助很大:spring-boot-thymeleaf-not-resolving-fragments-after-packaging
将你的本地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"]