<p>I am trying to call specific java class, which contain main methods, using Kubernetes. However, every combination of command/args in my deployment yaml ends with an error when creating the container.</p>

<p>deployment.yaml </p>

<pre><code>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
</code></pre>

<p>Dockerfile</p>

<pre><code>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"]
</code></pre>

<p>I expect to be able to create multiple deployment scripts and call them whenever I would like with their specific arguments. If there is a better way, I am all ears! Thanks</p>

user2888259
<p>You can specify the command line to start in the container only in the Dockerfile. That is, it is fixed for a given container image. However, you can pass environment variables to your container from the deployment and have your command line behave differently.</p>

<p>That is, you can have one single main class in Java and have that do different things based on the environment variable. Or you can have a wrapper shell script that you define as the entry point in your Dockerfile and have that script execute java command line with specific Java class based on the env variable.</p>
