java - spring boot 无法读取安装在多个实例中的 minikube 主机路径中的类路径中提供的库
问题描述
我有一个 spring boot 应用程序,它将与所有其他应用程序一起添加为 Kubernetes 中的 side car 应用程序。这个应用程序有一些子模块,只有在需要时才能通过类路径添加。我可以通过使用主机路径将卷安装到 Kubernetes 来实现这一点。
因为,我在我的本地 mac 电脑上使用 minikube。我必须先将我的本地文件夹挂载到 minikube(使用 minikube mount /Users/nischal/Documents/kubeApps/app1/:/app1),然后以下列方式在 pod 中使用它。
apiVersion: apps/v1
kind: Deployment
metadata:
name: app-pod-deployment
spec:
replicas: 1
selector:
matchLabels:
app: app1
template:
metadata:
labels:
app: app1
spec:
containers:
- name: app1
image: app1
imagePullPolicy: Never
ports:
- containerPort: 8080
volumeMounts:
- mountPath: /app/lib
name: app-lib-storage-dep
readOnly: true
volumes:
- name: app-lib-storage-dep
hostPath:
path: /app1/lib
type: Directory
以下是我的码头文件
FROM openjdk:11.0.8-jre-slim as builder
WORKDIR application
COPY finproxy-runner-1.0.0.jar app.jar
RUN java -Djarmode=layertools -jar app.jar extract
FROM openjdk:11.0.8-jre-slim
WORKDIR application
COPY --from=builder application/application/ ./
COPY --from=builder application/spring-boot-loader ./
ENTRYPOINT ["java","-cp","/app/lib/external/*:/app/lib/internal/*:/application","org.springframework.boot.loader.JarLauncher"]
这工作正常,但是当我将副本增加到 2 时。两个应用程序都没有出现并导致这个奇怪的错误。
Exception in thread "main" java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.base/java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:49)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:109)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:58)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:88)
Caused by: java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContext
at com.finacle.finproxy.FinProxyApplication.main(FinProxyApplication.java:13)
... 8 more
Caused by: java.lang.ClassNotFoundException: org.springframework.context.ApplicationContext
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(Unknown Source)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(Unknown Source)
at java.base/java.lang.ClassLoader.loadClass(Unknown Source)
... 9 more
我尝试了不同的调试方式,我可以登录到这两个实例,并且可以看到可用的文件,但应用程序无法读取它们。
我将此 lib 文件夹复制到 minikube 并尝试启动应用程序,它没有任何问题。
有人可以帮我解释这个问题可能发生的原因吗?
解决方案
推荐阅读
- algorithm - 检查 N^2 个元素是否可以转换为 N*N 对称矩阵的程序?
- c# - 如何在 C#(MonoDroid) 中将 EditText 长度限制为 6 个整数和 3 个小数位?
- angular - 我有一个“过滤器”功能,它假设根据名称过滤来自 Firestore 的数据。我能够从 firestore 获取全部数据
- javascript - 如何在文本区域内添加表情符号或图像图标?
- javascript - Ckeditor 工具栏项目在 Vue (Laravel) 中不可用
- python - 有什么方法可以绘制印度地图吗?
- javascript - ios os 中没有显示视频
- regex - 正则表达式灾难性回溯
- java - 为什么向上转换到父抽象类不起作用
- android - Ubuntu 或 Windows 上的 Packet Sender 等应用程序不接收从 Android Server Socket 发送的消息