我正在尝试在一个 pod 中创建两个容器,其中一个容器是 init 容器。 init 容器的工作是下载一个 jar 并使其可用于应用程序容器。我能够创建所有内容并且日志看起来不错,但是当我检查时,我在我的应用程序容器中没有看到 jar。以下是我的部署 yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-service-test
labels:
app: web-service-test
spec:
replicas: 1
selector:
matchLabels:
app: web-service-test
template:
metadata:
labels:
app: web-service-test
spec:
volumes:
- name: shared-data
emptyDir: {}
containers:
- name: web-service-test
image: some image
ports:
- containerPort: 8081
volumeMounts:
- name: shared-data
mountPath: /tmp/jar
initContainers:
- name: init-container
image: busybox
volumeMounts:
- name: shared-data
mountPath: /jdbc-jar
command:
- wget
- "https://repo1.maven.org/maven2/com/oracle/ojdbc/ojdbc8/19.3.0.0/ojdbc8-19.3.0.0.jar"
答案 0 :(得分:1)
您需要将 jar 保存在 /jdbc-jar
文件夹中
尝试将您的 yaml 更新为关注
command: ["/bin/sh"]
args: ["-c", "wget -O /pod-data/ojdbc8-19.3.0.0.jar https://repo1.maven.org/maven2/com/oracle/ojdbc/ojdbc8/19.3.0.0/ojdbc8-19.3.0.0.jar"]
答案 1 :(得分:0)
将以下代码块添加到您的 init 容器部分:
command: ["/bin/sh","-c"]
args: ["wget -O /jdbc-jar/ojdbc8-19.3.0.0.jar https://repo1.maven.org/maven2/com/oracle/ojdbc/ojdbc8/19.3.0.0/ojdbc8-19.3.0.0.jar"]
command ["/bin/sh", "-c"]
表示“运行 shell,并执行以下指令”。然后将 args 作为命令传递给 shell。在 shell 脚本中,分号分隔命令。在 wget
命令中,我添加了 -O 标志以从指定的 url 下载 jar 并将其保存为 /jdbc-jar/ojdbc8-19.3.0.0.jar
。
检查 jar 是否在容器中持久化。只需执行命令:
$ kubectl exec -it web-service-test -- /bin/bash
然后转到文件夹 /jdbc-jar
( $ cd jdbc-jar
) 并列出其中的文件 ($ ls -al
)。你应该在那里看到你的罐子。