0

我在 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:
..from:
......种类:ImageStreamTag
......名称:'redhat-openjdk18-openshift:1.2'
......命名空间:openshift

然后像: oc start-build $SERVICE_NAME --from-file=my-app.jar

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

4

1 回答 1

1

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

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

如果您不想打扰构建配置,那么您可以使用 Dockerfile 在 Openshift 之外构建映像,然后将映像直接部署到 openshift。这是Dockerfile 教程

编辑:

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

编辑:

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

  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 图像流,如果它还没有的话。

于 2018-12-12T17:22:46.603 回答