2015-03-30 7 views
3

Так я пытался dockerify свою весеннюю MVC 4 приложения с использованием Java: 8 базового изображения:Весенние шаблоны в Докер контейнер

У меня возникли проблемы на следующей строке при работе в докер, но за пределами докера все работает отлично! Это связано с поиском файлов шаблонов для моего проекта:

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/pages/**").addResourceLocations("classpath:/pages/"); 
} 

Как примечание, я попытался запустить с файлами шаблонов внутри jarfile и снаружи 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 

ответ

2

Оказывается, что, по умолчанию, докер капли файлы, не будучи не изменяли в изображение. Весна провела проверку на своих шаблонах, чтобы узнать, обновлены ли они. Выполнение следующих команд разрешило мою проблему, и теперь мне осталось думать, что одному из этих кодовых баз нужен отчет об ошибке.

$ 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 создано:

+0

Если есть уже не проблема для него, я бы один файл на Докер. По крайней мере, другие люди с подобными проблемами могут найти это. Но сообщение об исключении Java тоже не очень велико. –

+0

Открыт билет против обоих проектов. – Rannick

+0

Это нормально не происходит; вам нужно будет добавить информацию о ваших fs и о том, как файл был добавлен в отчет. –

0

Я использовал обходной путь, который упоминается в документации spring-boot-docker (во 2-й записки)

Добавление

RUN touch my.jar 

к вашему Dockerfile решит проблему.

1

Если вы следуя за путеводителем Spring Boot with Docker, комментарий о необходимости прикоснуться к банке больше недействителен, если вы используете плагин Spotify docker> v0.2.11. Обходной путь, указанный здесь и в других ответах, может быть отброшен.

Источник: https://github.com/spotify/docker-maven-plugin/issues/58

Смежные вопросы