Dockerized Spring 引导应用程序未读取 VCAP_SERVICES 环境变量 JSON
Dockerized Spring Boot application not reading VCAP_SERVICES environment variable JSON
我正在尝试将 VCAP_SERVICES(带下划线的全部大写)传递到我的 docker 容器,其中有一个 Spring 启动应用程序。应用程序出现并简单地忽略变量中的任何值。我正在使用配置服务器,日志的第一行通常记录该配置服务器所在的位置。它总是试图命中 localhost:8888,这是默认设置。
Docker 映像基于 openjdk:8 基本映像,扩展的 jar 文件只是复制到其中。
我尝试了很多不同的方式来传递它 json:
1- 作为一个名为 VCAP_SERVICES
的 ENV
,值只是 JSON 对象
2- 作为一个名为 SPRING_APPLICATION_JSON
的 ENV,带有一个 JSON 对象和一个名为 VCAP_SERVICES 的 属性
3- 试图从我的 google-fu"
传递不同的 ENV
变量
ENV SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_USE_SPRING_APPLICATION_JSON=false
ENV SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_TASK_USE_SPRING_APPLICATION_JSON=false
ENV JBP_CONFIG_SPRING_AUTO_RECONFIGURATION="{enabled: false}"
FROM openjdk:8
EXPOSE 80
EXPOSE 443
WORKDIR / app
ENV SPRING_APPLICATION_NAME="application name"
ENV VCAP_SERVICES="{ \"p-config-server \": [ { \"credentials \": { \"access_token_uri \": \"https://configserverURL/oauth/token \", \"client_id \": \"AUNIQUECLIENTID \", \"client_secret \": \"ASECRET\", \"uri \": \"https://CONFIGSERVERURL \" }, \"gateway_name \": \" \", \"label \": \"p-config-server \", \"name \": \"config-server \", \"instance_name \": \"config-server \", \"tags \": [ \"configuration \", \"spring-cloud \" ], \"volume_mounts \": [] } }"
COPY / .
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-cp",".","org.springframework.boot.loader.JarLauncher"]
我希望日志记录指示正确的配置服务器:
main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : https://CONFIGSERVERURL
但我得到
main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
PCF 中的启动命令如下所示:
JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS" && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=$MEMORY_LIMIT -loadedClasses=32446 -poolType=metaspace -stackThreads=250 -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher
原来你还需要一个环境变量 naked VCAP_APPLICATION 来触发另一个变量的读取。显然它甚至可以是空的
我正在尝试将 VCAP_SERVICES(带下划线的全部大写)传递到我的 docker 容器,其中有一个 Spring 启动应用程序。应用程序出现并简单地忽略变量中的任何值。我正在使用配置服务器,日志的第一行通常记录该配置服务器所在的位置。它总是试图命中 localhost:8888,这是默认设置。
Docker 映像基于 openjdk:8 基本映像,扩展的 jar 文件只是复制到其中。
我尝试了很多不同的方式来传递它 json:
1- 作为一个名为 VCAP_SERVICES
的 ENV
,值只是 JSON 对象
2- 作为一个名为 SPRING_APPLICATION_JSON
的 ENV,带有一个 JSON 对象和一个名为 VCAP_SERVICES 的 属性
3- 试图从我的 google-fu"
ENV
变量
ENV SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_STREAM_USE_SPRING_APPLICATION_JSON=false
ENV SPRING_CLOUD_DEPLOYER_CLOUDFOUNDRY_TASK_USE_SPRING_APPLICATION_JSON=false
ENV JBP_CONFIG_SPRING_AUTO_RECONFIGURATION="{enabled: false}"
FROM openjdk:8
EXPOSE 80
EXPOSE 443
WORKDIR / app
ENV SPRING_APPLICATION_NAME="application name"
ENV VCAP_SERVICES="{ \"p-config-server \": [ { \"credentials \": { \"access_token_uri \": \"https://configserverURL/oauth/token \", \"client_id \": \"AUNIQUECLIENTID \", \"client_secret \": \"ASECRET\", \"uri \": \"https://CONFIGSERVERURL \" }, \"gateway_name \": \" \", \"label \": \"p-config-server \", \"name \": \"config-server \", \"instance_name \": \"config-server \", \"tags \": [ \"configuration \", \"spring-cloud \" ], \"volume_mounts \": [] } }"
COPY / .
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-cp",".","org.springframework.boot.loader.JarLauncher"]
我希望日志记录指示正确的配置服务器:
main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : https://CONFIGSERVERURL
但我得到
main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at : http://localhost:8888
PCF 中的启动命令如下所示:
JAVA_OPTS="-agentpath:$PWD/.java-buildpack/open_jdk_jre/bin/jvmkill-1.16.0_RELEASE=printHeapHistogram=1 -Djava.io.tmpdir=$TMPDIR -Djava.ext.dirs=$PWD/.java-buildpack/container_security_provider:$PWD/.java-buildpack/open_jdk_jre/lib/ext -Djava.security.properties=$PWD/.java-buildpack/java_security/java.security $JAVA_OPTS" && CALCULATED_MEMORY=$($PWD/.java-buildpack/open_jdk_jre/bin/java-buildpack-memory-calculator-3.13.0_RELEASE -totMemory=$MEMORY_LIMIT -loadedClasses=32446 -poolType=metaspace -stackThreads=250 -vmOptions="$JAVA_OPTS") && echo JVM Memory Configuration: $CALCULATED_MEMORY && JAVA_OPTS="$JAVA_OPTS $CALCULATED_MEMORY" && MALLOC_ARENA_MAX=2 SERVER_PORT=$PORT eval exec $PWD/.java-buildpack/open_jdk_jre/bin/java $JAVA_OPTS -cp $PWD/. org.springframework.boot.loader.JarLauncher
原来你还需要一个环境变量 naked VCAP_APPLICATION 来触发另一个变量的读取。显然它甚至可以是空的