【问题标题】:Overriding Docker ENTRYPOINT in Kubernetes在 Kubernetes 中覆盖 Docker ENTRYPOINT
【发布时间】:2022-01-09 20:37:43
【问题描述】:

我有一个在 Kubernetes 集群中运行的 Spring Boot 应用程序的 Docker 映像。我正在尝试覆盖入口点。

我原来的入口点是

ENTRYPOINT ["java", "-jar", "/app/myapp-exec.jar"]

所以我尝试在部署规范中覆盖它,因为我需要传递一些 JVM 参数:

      command: ["sh", "-c", "java ${JAVA_OPTS} -jar /app/myapp-exec.jar ${0} ${@}"]
      args:
        - --spring[0].property=property_value
      env:
        - name: "JAVA_OPTS"
          value: "...jvm options..."
        - name: spring.property1
          value: property_value
        - name: spring.property2
          value: property_value

我的应用程序已启动,但在 env 下定义的用于通过原始入口点传递给 Spring 应用程序的属性不再传递。根据Spring Docker documentation,${0} ${@} 应该可以解决我的确切问题,但它似乎不起作用。

感谢任何帮助。

【问题讨论】:

    标签: spring docker kubernetes


    【解决方案1】:

    您可以通过使主容器进程成为一个非常短的 shell 脚本来解决各种 shell 引用问题:

    #!/bin/sh
    exec java $JAVA_OPTS -jar /myapp-exec.jar "$@"
    

    然后您的 Dockerfile 可以将此脚本指定为主要容器命令,而不是试图以某种方式将其硬塞到 ENTRYPOINT/CMD 拆分中。

    COPY run-myapp.sh .
    CMD ["./run-myapp.sh"]  # (I tend to prefer CMD to ENTRYPOINT)
    

    如果您试图作为命令行参数传递的唯一内容是 Spring 属性,您可以 specify those as environment variables;这比试图弄清楚命令行设置要容易得多。因此,对于您的用例,我会指定

    containers:
      - name: myapp
        image: registry.example.com/myapp:20211203
        # neither command: nor args:
        env:
          - name: "JAVA_OPTS"
            value: "...jvm options..."
          - name: SPRING_PROPERTY1
            value: property_value
          - name: SPRING_PROPERTY2
            value: property_value
          - name: SPRING_0_PROPERTY
            value: property_value
    

    【讨论】:

    • 我实际上是在尝试避免从 Dockerfile 内部更改入口点,至少在测试阶段是这样,但我想我别无选择。
    • 我遇到了 exec 问题,上面写着 exec user process caused: no such file or directory。环境看起来不错,./bin 就在其中,因此 sh。 Java 也设置正确。顺便说一句,我必须使用 args,有些属性使用 [] 并且我不能将它们放在 env 中,它不喜欢它。说字符不允许。除了调用bin/sh -c 而不是exec 之外,我设法让所有东西都以您所做的相同方式运行,但是args 不起作用,并且容器因此而无法运行。我想他们也不会和 exec 在一起,想想吧。
    猜你喜欢
    • 2017-05-03
    • 2018-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    相关资源
    最近更新 更多