Openshift 如何启动一个 fat-jar

How is Openshift starting a fat-jar

我在 Openshift 上部署了一个带有 Spring-boot fat-jar 的映像。我的图像基于 redhat-openjdk18-openshift:1.2.

我的应用程序启动正常,我在终端中看到以下内容

Starting the Java application using /opt/run-java/run-java.sh ...

exec java -javaagent:/opt/jolokia/jolokia.jar=config=/opt/jolokia/etc/jolokia.properties
-XX:+UseParallelGC -XX:MinHeapFreeRatio=20 -XX:MaxHeapFreeRatio=40
-XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -XX:MaxMetaspaceSize=100m 
-XX:+ExitOnOutOfMemoryError -cp . -jar /deployments/MYAPPLICATION.jar

我的问题是:

  1. 这种胶水是从哪里来的(exec java ...)? Openshift 如何知道这个 jar 文件是可执行的?
  2. 我想添加一些命令行参数。我发现以下方法有效:

但后来我把上面的 Jolokia 东西弄丢了。有没有更好的方法?

更新: 我使用以下策略:

策略:
..sourceStrategy:
....来自:
......种类:ImageStreamTag
......姓名:'redhat-openjdk18-openshift:1.2'
......命名空间:openshift

然后喜欢: oc 开始构建 $SERVICE_NAME --from-file=my-app.jar

此外,您链接的文档正是我所遵循的。参见上面的步骤 (2)。然后我松了 Jolokia 的东西。我想我正在寻找一种方法来扩展现有的入口点,而不是重载它。

命令exec java -javaagent:/opt/jolokia/jolokia.jar=config=/opt/jolokia/etc/jolokia.properties是容器的入口点,是容器运行时执行的命令和参数。构建映像时设置入口点。

您没有说您使用什么策略来构建映像,但是如果您想要更好地控制入口点和其他容器参数,那么您可以使用 Docker strategy。您将使用此方法完全控制图像,因此您可以设置环境变量、参数和自变量等内容。

如果您不想为构建配置操心,那么您可以使用 Dockerfile 在 Openshift 外部构建镜像,然后将镜像直接部署到 openshift。这里是 Dockerfile tutorial.

编辑:

此外,我认为您仍然可以使用您当前正在尝试的方法,但您需要手动将 Jolokia args 添加到规范中,但我认为最好的方法仍然是在构建配置,您可以在其中控制整个图像的入口点和参数,而不是覆盖现有入口点。这是容器内 运行ning 命令的 documentation

编辑:

根据您提供的更新,我认为切换到 docker 策略仍然是您的最佳选择。 source 策略只是自动为您构建图像,但正如我上面提到的 dockerfile 策略将让您控制整个构建过程。这是内联 docker 文件的示例:

  apiVersion: v1
  kind: BuildConfig
  metadata:
    annotations:
      description: Defines how to build the application
    labels:
      application: MYAPPLICATION
    name: MYAPPLICATION
    namespace: PROJECT_NAME
  spec:
    output:
      to:
        kind: ImageStreamTag
        name: MYAPPLICATION:latest
    source:
      binary: {}
      dockerfile: |-
        FROM redhat-openjdk18-openshift:1.2
        COPY deployments/* /
        ENTRYPOINT  java -jar MYAPPLICATION.jar
      type: Binary
    strategy:
      dockerStrategy:
        from:
          kind: ImageStreamTag
          name: redhat-openjdk18-openshift:1.2
      type: Docker

这样您就可以通过复制现有命令并添加您想要的任何其他命令来扩展入口点。您可能需要在您的项目中创建 openjdk 图像流,如果它不存在的话。