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 字段来灵活地传递参数和配置信息给容器
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐