【问题标题】:Microservice java property not set in application.properties微服务 java 属性未在 application.properties 中设置
【发布时间】:2021-11-13 11:49:37
【问题描述】:

我在 micros1-mvc 微服务 application.properties 中有以下行:eureka.client.serviceUrl.defaultZone=${EUREKA_SERVER}

我在容器内执行微服务:

sudo docker run -p 8081:8081 --network mynetw --env JAVA_OPTS="-DEUREKA_SERVER=http://eurekaserver:8761/eureka" micros1-mvc

当微服务尝试与 Eureka 连接时,它会说:

overyClient : DiscoveryClient_SERVICEASERVICE/1754e70517a8:serviceaservice:8081 - 无法刷新其缓存!这种周期性的后台刷新将 30 秒后重试。 status = 没有已知的eureka服务器; 集群服务器列表为空 stacktrace = com.netflix.discovery.shared.transport.TransportException:没有 已知的尤里卡服务器;集群服务器列表为空 com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:108) 在 com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) 在 com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$6.execute(EurekaHttpClientDecorator.java:137) 在 com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) 在 com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.getApplications(EurekaHttpClientDecorator.java:134) 在 com.netflix.discovery.DiscoveryClient.getAndStoreFullRegistry(DiscoveryClient.java:1101) 在 com.netflix.discovery.DiscoveryClient.fetchRegistry(DiscoveryClient.java:1014) 在 com.netflix.discovery.DiscoveryClient.refreshRegistry(DiscoveryClient.java:1531)

看起来微服务属性文件在 docker 执行中没有收到指定的值

【问题讨论】:

    标签: spring-boot docker properties


    【解决方案1】:

    经过一番搜索,我发现 JAVA_OPTS 非常特定于 Catalina (Tomcat)。查看 tomcat 安装的 bin 文件夹,您会发现一个用于处理将 JAVA_OPTS 传递到 exec 行的 shell 脚本。

    像这样的 Dockerfile:
    FROM openjdk:8-jdk-alpine
    VOLUME /tmp
    ARG JAR_FILE=target/*.jar
    COPY ${JAR_FILE} app.jar
    ENTRYPOINT ["java","${JAVA_OPTS}","-jar","/app.jar"]

    有: docker run -p 9000:9000 -e JAVA_OPTS=-Dserver.port=9000 myorg/myapp

    失败。这失败了,因为 ${} 替换需要一个 shell。 exec 表单不使用 shell 来启动进程,因此不应用选项。您可以通过将入口点移动到脚本或在入口点显式创建 shell 来解决此问题。以下示例展示了如何在入口点创建 shell:
    ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"]

    然后您可以通过运行以下命令来启动此应用:
    docker run -p 8080:8080 -e "JAVA_OPTS=-Ddebug -Xmx128m" myorg/myapp

    【讨论】:

      猜你喜欢
      • 2018-07-26
      • 2018-04-14
      • 1970-01-01
      • 2018-12-16
      • 2017-09-19
      • 2021-03-01
      • 2021-01-13
      • 2020-04-26
      • 1970-01-01
      相关资源
      最近更新 更多