【问题标题】:Passing cmd arguments to java app in docker container via k8s Job file通过k8s作业文件将cmd参数传递给docker容器中的java应用程序
【发布时间】:2021-09-08 02:44:14
【问题描述】:

我试图了解如何将命令行参数传递给我的 java 应用程序,该应用程序被容器化在我想从 Kubernetes 运行的 Docker 容器中。 让我告诉你我到目前为止做了什么。 dockerfile:

FROM java:8
WORKDIR /
ADD myApp.jar myApp.jar
COPY entry-point.sh /
RUN chmod +x entry-point.sh
EXPOSE 8080
ENTRYPOINT ["/entry-point.sh"]

entry-point.sh 有这样的内容:

#!/bin/sh
echo "arguments: $1"
java -jar myApp.jar $1

k8s 文件:

    apiVersion: batch/v1
    metadata:
      name: myapp-test-job
      namespace: myNamespace
    kind: Job
    metadata:
      name: myapp
    spec:
      template:
        metadata:
          labels:
            app: myapp
        spec:
          containers:
          - args:
            - -c
            - /opt/config/configuration.yml
            name: myapp
            image: myapp:latest
            imagePullPolicy: Never
            args:
            volumeMounts:
              - name: config
                mountPath: /opt/config
          restartPolicy: Never
          volumes:
            - name: config
              configMap:
                name: configurations
                items:
                - key: "configuration.yml"
                  path: "configuration.yml"
---
apiVersion: v1
kind: ConfigMap
metadata:
  name: configurations
  namespace: myapp
data:
  configuration.yml: |
    #HERE ALL THE CONFIGS

应用程序本身已执行,但找不到配置文件,我看到entry-point.sh 文件的输出:arguments:,但我猜我在 kubernetes 文件中声明的参数没有被传递全部到入口点文件,我认为: 当需要传递参数时,ENTRYPOINT ["/entry-point.sh"] 格式不正确。 有人给点建议吗?

【问题讨论】:

    标签: java docker kubernetes


    【解决方案1】:

    您可以使用类似下面的命令代替 CMD ["echo", "arguments:$1"] CMD ["java", "-jar myApp.jar"]

    【讨论】:

      【解决方案2】:

      您的脚本仅使用第一个参数$1。有一个特殊变量 $@ 可以扩展为所有参数,因此您可以将脚本更改为:

      #!/bin/sh
      echo "arguments: $@"
      # $@ and not $1; make sure to quote it as well
      java -jar myApp.jar "$@"
      

      如果你的包装脚本只是将它的选项传递给一些底层程序,那么放弃包装脚本并让程序成为 Docker ENTRYPOINT 可能是有意义的。 (或者,如果您需要在启动命令之前进行一些初始设置,请保留包装器。)

      # The main command to run.  Should be enough to actually run the
      # application (don't use just ["java"]).  Must be JSON-array syntax.
      ENTRYPOINT ["java", "-jar", "myApp.jar"]
      
      # Additional options to the program.  Can be overridden with options
      # after the `docker run image-name`, Compose `command:`, or
      # Kubernetes `args:`.  Must be JSON-array syntax.
      CMD []
      # (including the previous line is optional)
      

      【讨论】:

        猜你喜欢
        • 2017-04-26
        • 2017-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-29
        • 1970-01-01
        • 2018-05-03
        • 2018-08-05
        相关资源
        最近更新 更多