通过k8s作业文件将cmd参数传递给docker容器中的java应用程序
我试图理解如何将命令行参数传递给我的java应用程序,该应用程序被封装在Docker容器中,我想从Kubernetes运行。 让我告诉你我到目前为止做了什么。 dockerfile:
FROM java:8
WORKDIR /
ADD myApp.jar myApp.jar
COPY entry-point.sh /
RUN chmod +x entry-point.sh
EXPOSE 8080
ENTRYPOINT ["/entry-point.sh"]
entry-point.sh
包含以下内容:
#!/bin/sh
echo "arguments: $1"
java -jar myApp.jar $1
k8s文件:
apiVersion: batch/v1
metadata:
name: myapp-test-job
namespace: myNamespace
kind: Job
metadata:
name: myapp
spec:
template:
metadata:
labels:
app: myapp
spec:
containers:
- args:
- -c
- /opt/config/configuration.yml
name: myapp
image: myapp:latest
imagePullPolicy: Never
args:
volumeMounts:
- name: config
mountPath: /opt/config
restartPolicy: Never
volumes:
- name: config
configMap:
name: configurations
items:
- key: "configuration.yml"
path: "configuration.yml"
---
apiVersion: v1
kind: ConfigMap
metadata:
name: configurations
namespace: myapp
data:
configuration.yml: |
#HERE ALL THE CONFIGS
应用程序本身已执行,但找不到配置文件,我看到了entry-point.sh
文件的输出:arguments:
,但我猜我在kubernetes文件中声明的参数根本没有传递到入口点文件,我认为:
^当需要传递参数时,{
# 1 楼答案
脚本仅使用第一个参数
$1
。有一个特殊变量$@
可扩展到所有参数,因此您可以将脚本更改为:如果您的包装器脚本只是将其选项传递给某个底层程序,那么不使用包装器脚本,只将该程序设置为Docker
ENTRYPOINT
是有意义的。(或者,如果在启动命令之前需要进行一些初始设置,请保留包装。)# 2 楼答案
您可以使用如下内容来代替CMD[“echo”,“arguments:$1”] CMD[“java”,“-jar myApp.jar”]