您的位置 首页 linux 运维

k8s 挂载容器可写目录

Spring Boot 内嵌 Tomcat 启动时,默认会使用 java.io.tmpdir(即 /tmp)来创建一个临时目录,用于存放工作文件(如 session、编译 JSP 等)。
但在当前运行环境中,/tmp 所在的磁盘或挂载点是 只读文件系统,Java 没有权限写入,因此创建失败。

 

问题分析
根本原因: Spring Boot内嵌Tomcat默认使用java.io.tmpdir系统属性指定的目录(通常是/tmp)来创建临时工作目录
环境限制: 在当前K8s运行环境中,/tmp目录所在的文件系统被挂载为只读模式
导致结果: Tomcat无法创建必要的临时文件和工作目录,应用启动失败

解决方案

1. 通过JVM参数修改临时目录

在K8s部署配置中设置JVM系统属性:

env:
- name: JAVA_OPTS
  value: "-Djava.io.tmpdir=/tmp/writable"

2. 使用emptyDir卷挂载可写目录

spec:
  containers:
  - name: spring-boot-app
    volumeMounts:
    - name: tmp-volume
      mountPath: /tmp/writable
  volumes:
  - name: tmp-volume
    emptyDir: {}

3. 在应用配置中指定Tomcat基础目录

在application.properties中配置:

server.tomcat.basedir=/app/temp

4. 组合解决方案示例

apiVersion: apps/v1
kind: Deployment
spec:
  template:
    spec:
      containers:
      - name: app
        env:
        - name: JAVA_OPTS
          value: "-Djava.io.tmpdir=/app/temp"
        volumeMounts:
        - name: temp-volume
          mountPath: /app/temp
      volumes:
      - name: temp-volume
        emptyDir: {}

 

欢迎来撩 : 汇总all

白眉大叔

关于白眉大叔linux云计算: 白眉大叔

热门文章