在K8s集群上运行的Docker容器内调用特定的Java主类

时间:2019-05-28 20:56:58

标签: java spring docker kubernetes

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

deployment.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"]

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

1 个答案:

答案 0 :(得分:0)

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

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