Spring 个模板在 Docker 个容器中
Spring Templates in Docker Container
所以我一直在尝试使用 java:8 基本图像 docker 验证我的 spring-mvc 4 应用程序:
当 docker 中的 运行 时,我在下一行遇到问题,但在 docker 之外一切正常!它与查找我的项目的模板文件有关:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pages/**").addResourceLocations("classpath:/pages/");
}
请注意,我已经尝试 运行 jarfile 内部和外部的模板文件。 url 调试代码显示它找到了正确的文件,但是当它尝试使用它们时,出现以下异常:
engine_1 | jvm 1 |java.io.FileNotFoundException: class path resource [pages/saga-index.html] cannot be resolved in the file system for resolving its last-modified timestamp
engine_1 | jvm 1 | at org.springframework.core.io.AbstractResource.lastModified(AbstractResource.java:155)
engine_1 | jvm 1 | at org.springframework.core.io.AbstractFileResolvingResource.lastModified(AbstractFileResolvingResource.java:169)
engine_1 | jvm 1 | at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:229)
engine_1 | jvm 1 | at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)
engine_1 | jvm 1 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
engine_1 | jvm 1 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
engine_1 | jvm 1 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
engine_1 | jvm 1 | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
engine_1 | jvm 1 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
engine_1 | jvm 1 | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
engine_1 | jvm 1 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
engine_1 | jvm 1 | at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
engine_1 | jvm 1 | at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)
engine_1 | jvm 1 | at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
如何解决这个异常?为什么我无法获得时间戳?
(更多统计数据)
$ docker exec siteconfiguration_engine_1 java -version
openjdk version "1.8.0_40-internal"
OpenJDK Runtime Environment (build 1.8.0_40-internal-b27)
OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)
$ docker exec siteconfiguration_engine_1 df -h
Filesystem Size Used Avail Use% Mounted on
none 19G 2.5G 15G 15% /
tmpfs 1004M 0 1004M 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/sda1 19G 2.5G 15G 15% /etc/hosts
$ docker exec siteconfiguration_engine_1 ls -l /decision-engine/etc/pages
total 4
-rw-r--r-- 1 root root 809 Jan 1 1970 saga-index.html
似乎默认情况下,docker 将文件丢弃为从未修改过的图像。 Spring 已对其模板进行健全性检查以查看它们是否已更新。执行以下命令解决了我的问题,现在我认为这些代码库之一需要针对它的错误报告。
$ docker exec siteconfiguration_engine_1 bash -c 'touch -m /decision-engine/etc/pages/saga-index.html'
$ docker exec siteconfiguration_engine_1 ls -l /decision-engine/etc/pages
total 4
-rw-r--r-- 1 root root 810 Mar 30 02:39 saga-index.html
这是@Rannick 创建的错误:
我使用了 spring-boot-docker 文档中提到的解决方法(在第二条注释中)
添加
RUN touch my.jar
你的Dockerfile
会解决问题。
如果您遵循 Spring Boot with Docker 指南,如果您使用 Spotify docker 插件 > v0.2.11,关于需要触摸罐子的评论不再正确。可以放弃那里和其他答案中列出的解决方法。
所以我一直在尝试使用 java:8 基本图像 docker 验证我的 spring-mvc 4 应用程序:
当 docker 中的 运行 时,我在下一行遇到问题,但在 docker 之外一切正常!它与查找我的项目的模板文件有关:
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pages/**").addResourceLocations("classpath:/pages/");
}
请注意,我已经尝试 运行 jarfile 内部和外部的模板文件。 url 调试代码显示它找到了正确的文件,但是当它尝试使用它们时,出现以下异常:
engine_1 | jvm 1 |java.io.FileNotFoundException: class path resource [pages/saga-index.html] cannot be resolved in the file system for resolving its last-modified timestamp
engine_1 | jvm 1 | at org.springframework.core.io.AbstractResource.lastModified(AbstractResource.java:155)
engine_1 | jvm 1 | at org.springframework.core.io.AbstractFileResolvingResource.lastModified(AbstractFileResolvingResource.java:169)
engine_1 | jvm 1 | at org.springframework.web.servlet.resource.ResourceHttpRequestHandler.handleRequest(ResourceHttpRequestHandler.java:229)
engine_1 | jvm 1 | at org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter.handle(HttpRequestHandlerAdapter.java:51)
engine_1 | jvm 1 | at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
engine_1 | jvm 1 | at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
engine_1 | jvm 1 | at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
engine_1 | jvm 1 | at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
engine_1 | jvm 1 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
engine_1 | jvm 1 | at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
engine_1 | jvm 1 | at javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
engine_1 | jvm 1 | at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:684)
engine_1 | jvm 1 | at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:503)
engine_1 | jvm 1 | at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1086)
如何解决这个异常?为什么我无法获得时间戳?
(更多统计数据)
$ docker exec siteconfiguration_engine_1 java -version
openjdk version "1.8.0_40-internal"
OpenJDK Runtime Environment (build 1.8.0_40-internal-b27)
OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)
$ docker exec siteconfiguration_engine_1 df -h
Filesystem Size Used Avail Use% Mounted on
none 19G 2.5G 15G 15% /
tmpfs 1004M 0 1004M 0% /dev
shm 64M 0 64M 0% /dev/shm
/dev/sda1 19G 2.5G 15G 15% /etc/hosts
$ docker exec siteconfiguration_engine_1 ls -l /decision-engine/etc/pages
total 4
-rw-r--r-- 1 root root 809 Jan 1 1970 saga-index.html
似乎默认情况下,docker 将文件丢弃为从未修改过的图像。 Spring 已对其模板进行健全性检查以查看它们是否已更新。执行以下命令解决了我的问题,现在我认为这些代码库之一需要针对它的错误报告。
$ docker exec siteconfiguration_engine_1 bash -c 'touch -m /decision-engine/etc/pages/saga-index.html'
$ docker exec siteconfiguration_engine_1 ls -l /decision-engine/etc/pages
total 4
-rw-r--r-- 1 root root 810 Mar 30 02:39 saga-index.html
这是@Rannick 创建的错误:
我使用了 spring-boot-docker 文档中提到的解决方法(在第二条注释中)
添加
RUN touch my.jar
你的Dockerfile
会解决问题。
如果您遵循 Spring Boot with Docker 指南,如果您使用 Spotify docker 插件 > v0.2.11,关于需要触摸罐子的评论不再正确。可以放弃那里和其他答案中列出的解决方法。