【问题标题】:Call specific java main class inside of docker container running on K8s cluster在 K8s 集群上运行的 docker 容器内调用特定的 java 主类
【发布时间】:2019-05-29 05:04:42
【问题描述】:

我正在尝试使用 Kubernetes 调用包含主要方法的特定 java 类。但是,我的部署 yaml 中的每个命令/参数组合在创建容器时都会以错误结束。

部署.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: reports
spec:
  replicas: 1
  selector:
    matchLabels:
      app: reports
  template:
    metadata:
      labels: 
        app: reports
    spec:
      containers:
      - name: reports
        command: ["java -cp reports.jar com.gswsa.is.reports.TestRunner"]
        image: blah/reports:latest
        volumeMounts:
        - mountPath: /tmp/logs/reports
          name: logvolume

Dockerfile

FROM openjdk:8-jdk-alpine
RUN apk add --no-cache tzdata
RUN apk --update add fontconfig ttf-dejavu
ENV TZ America/New_York
VOLUME /tmp/logs/reports
ARG JAR_FILE=target/reports-1.0.0.jar
COPY ${JAR_FILE} /reports.jar
#ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/reports.jar"]
#CMD ["/usr/bin/java", "-jar", "-Dspring.profiles.active=PROD", "/reports.jar"]

我希望能够创建多个部署脚本,并在需要时使用它们的特定参数调用它们。如果有更好的方法,我会全力以赴!谢谢

【问题讨论】:

标签: java spring docker kubernetes


【解决方案1】:

您只能在 Dockerfile 中指定要在容器中启动的命令行。也就是说,它对于给定的容器图像是固定的。但是,您可以将环境变量从部署传递到您的容器,并让您的命令行表现不同。

也就是说,您可以在 Java 中拥有一个主类,并根据环境变量让其执行不同的操作。或者,您可以拥有一个包装器 shell 脚本,将其定义为 Dockerfile 中的入口点,并让该脚本使用基于 env 变量的特定 Java 类执行 java 命令行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-24
    • 2021-08-05
    • 2022-07-09
    • 2022-10-14
    • 2020-08-18
    • 2021-01-07
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多