У нас есть несколько сервисов SpringBoot (2.0.5), работающих в контейнерах в модулях k8s.
Время от времени мы видим, что контейнеры не запускаются с такими ошибками:
org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is org.springframework.boot.web.server.WebServerException: Unable to create tempDir. java.io.tmpdir is set to /tmp
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:155)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:544)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:780)
Я часто вижу ошибку go, если просто перезапускаю всю сборку, включая перестройку образа.
Мы обнаружили, что большую часть времени наши папки на root контейнер выглядит так:
drwxrwxrwt 6 root root 138 Apr 20 21:57 tmp
Когда мы получаем это, мы не получаем ошибку. Однако иногда мы получаем это:
drwxr-xr-x 3 root root 4096 Apr 28 22:09 tmp
Когда это происходит, мы получаем эту ошибку.
Мы также отмечаем, что наш Dockerfile содержит в себе "VOLUME / tmp", по сути, навсегда , но мы никогда ничего не отображаем на него.
Мы намерены сделать так, чтобы наши контейнерные файловые системы были доступны только для чтения, но мы явно должны разрешить запись в / tmp, так как Tomcat хочет, чтобы это произошло, хотя предположительно это возможно перенастроить, где он пытается записать эти временные файлы. Однако я не могу понять, как это настроить в Spring Boot.
Здесь есть несколько проблем, и я не совсем точно знаю, как с этим справиться.