k8s处理pod中java自定义参数的处理方式

文章讲述了在Dockerfile中通过ENTRYPOINT和在Kubernetespod的yaml配置中通过args和env字段传递参数的区别和正确方法。错误地在Dockerfile中使用环境变量导致启动报错,修正后通过yaml文件的args字段传递网络和共识参数,使得应用正常启动。强调了args适用于命令行参数,env适合配置环境变量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、我有两个参数
–network.params=testnet
–coin.consensus=COINS
启动命令

java -jar app.jar --network.params=testnet --coin.consensus=COINS

错误 操作

1)、首当其冲的设想,编写Dockerfile

FROM openjdk:8
LABEL maintainer=biking
ARG JOB_NAME
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /data
COPY target/${JOB_NAME}-1.0.0.jar /data/app.jar
RUN echo "$JOB_NAME" > ./$JOB_NAME.uuid
ENTRYPOINT ["java","-Dspring.cloud.nacos.config.server-addr=${NACOS}:8848","-Dspring.cloud.nacos.discovery.server-addr=${NACOS}:8848", "-jar", "app.jar", "--network.params=${NET}", "--coin.consensus=${COINS}"]

2)、pod的yaml文件配置方式

    spec:
      containers:
        - env:
            - name: TZ
              value: Asia/Shanghai
            - name: NACOS
              value: 172.16.0.20  
            - name: NET
              value: testnet
            - name: COINS
              value: COINS                                        
          image: 'registry.ap-southeast-1.aliyuncs.com/bking/wallet-core:pre'
          imagePullPolicy: Always
          name: wallet-core
          ports:
            - containerPort: 8013
              name: sdfsdd
              protocol: TCP		  
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File

3)、结果启动报错
报错提示${NET}不支持

通过查询资料,最后得到解决办法

1)Dockerfile去除掉对应的两个参数

FROM openjdk:8
LABEL maintainer=biking
ARG JOB_NAME
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /data
COPY target/${JOB_NAME}-1.0.0.jar /data/app.jar
RUN echo "$JOB_NAME" > ./$JOB_NAME.uuid
ENTRYPOINT ["java","-Dspring.cloud.nacos.config.server-addr=${NACOS}:8848","-Dspring.cloud.nacos.discovery.server-addr=${NACOS}:8848", "-jar", "app.jar"]

2)yaml配置文件编写如下

    spec:
      containers:
        - args:
            - '--network.params=mainnet'
            - '--coin.consensus=COINS'         
          env:
            - name: TZ
              value: Asia/Shanghai
            - name: NACOS
              value: 172.16.0.20              
          image: 'registry.ap-southeast-1.aliyuncs.com/bking/wallet-core:pre'
          imagePullPolicy: Always
          name: wallet-core
          ports:
            - containerPort: 8013
              name: sdfsdd
              protocol: TCP		  
          resources: {}
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File

最终正常启动

总结

args  env 字段都用于向容器传递参数,但它们的使用方式略有不同。

args 字段用于指定容器运行时的命令行参数。您可以在该字段中列出要传递给容器的命令行参数,每个参数使用一个独立的字符串。这些参数将直接传递给容器内的应用程序或进程。通常,这些参数用于配置应用程序的行为、启用特定的功能或传递运行时选项。

env 字段用于设置容器的环境变量。您可以在该字段中定义一个或多个环境变量,每个变量都由名称和值组成。这些环境变量可在容器内部使用,并通过环境变量的方式传递给应用程序。环境变量通常用于配置应用程序的各种属性,如数据库连接信息、API 密钥、调试标志等。

总体而言,args 字段更适合传递命令行参数,而 env 字段更适合传递配置项和其他应用程序环境变量。

 Kubernetes 中,根据您的需求和应用程序的要求,您可以同时使用 args  env 字段来灵活地传递参数和配置信息给容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yunson_Liu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值