java - 通过k8s作业文件将cmd参数传递给docker容器中的java应用程序
问题描述
我试图了解如何将命令行参数传递给我的 java 应用程序,该应用程序被容器化在我想从 Kubernetes 运行的 Docker 容器中。让我告诉你我到目前为止做了什么。码头工人文件:
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 文件中声明的参数根本没有传递给入口点文件,我认为这是:
ENTRYPOINT ["/entry-point.sh"]
当需要传递参数时,格式不正确。有人有建议吗?
解决方案
您的脚本仅使用第一个参数$1
。有一个特殊变量$@
可以扩展到所有参数,因此您可以将脚本更改为:
#!/bin/sh
echo "arguments: $@"
# $@ and not $1; make sure to quote it as well
java -jar myApp.jar "$@"
如果您的包装脚本只是将其选项传递给一些底层程序,那么放弃包装脚本并让程序成为 Docker 可能是有意义的ENTRYPOINT
。(或者,如果您需要在启动命令之前进行一些初始设置,请保留包装器。)
# The main command to run. Should be enough to actually run the
# application (don't use just ["java"]). Must be JSON-array syntax.
ENTRYPOINT ["java", "-jar", "myApp.jar"]
# Additional options to the program. Can be overridden with options
# after the `docker run image-name`, Compose `command:`, or
# Kubernetes `args:`. Must be JSON-array syntax.
CMD []
# (including the previous line is optional)
推荐阅读
- javascript - 嵌套 React 条件渲染的问题
- javascript - 让匿名用户通过 api 在我自己的个人 google 议程中创建事件
- postgresql - 如何检索 PostgreSQL 数据库和表静态数据并加载到 Power BI 仪表板?
- grep - 在 R 中使用 grep 进行数据清理
- c# - 如何在 Xamarin.Forms 页面中使用 Spotlight Xamarin.Android 库
- sql - 尽管编码设置与 DBI 相同,但 RODBC 未读取 unicode
- python - 按索引熊猫删除列
- python - MagicMock 对象的计算结果为 False
- karate - 使用空手道对 JSON 进行模式验证
- c++ - C++ struct 静态成员变量可以隐藏非类型模板参数吗?