java - Spring Boot Profile 作为 Docker ARGS 用于动态运行参数
问题描述
我有一个用于 Spring Boot 应用程序的 docker-compose.yml,其条目如下:
paramer:
image: miko/paramer:0.2.0
build:
context: ../paramer-docker/build
args:
profile: docker
container_name: miko-paramer
ports:
- "8050:8050"
restart: unless-stopped
相关Dockerfile如下:
ARG profile
COPY ./external/paramer-* app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=$profile","-jar","app.jar"]
但是,它会在 docker-compose up 处引发错误:
miko-paramer | 12:42:54.334 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed
miko-paramer | java.lang.IllegalArgumentException: Could not resolve placeholder 'PROFILE' in value "${PROFILE}"
miko-paramer | at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
miko-paramer | at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
miko-paramer | at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236)
miko-paramer | at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
miko-paramer | at org.springframework.core.env.AbstractPropertyResolver.resolveNestedPlaceholders(AbstractPropertyResolver.java:227)
miko-paramer | at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:83)
miko-paramer | at org.springframework.core.env.PropertySourcesPropertyResolver.getProperty(PropertySourcesPropertyResolver.java:61)
miko-paramer | at org.springframework.core.env.AbstractEnvironment.getProperty(AbstractEnvironment.java:530)
miko-paramer | at org.springframework.core.env.AbstractEnvironment.doGetActiveProfiles(AbstractEnvironment.java:240)
miko-paramer | at org.springframework.core.env.AbstractEnvironment.getActiveProfiles(AbstractEnvironment.java:226)
miko-paramer | at org.springframework.boot.SpringApplication.configureProfiles(SpringApplication.java:531)
miko-paramer | at org.springframework.boot.SpringApplication.configureEnvironment(SpringApplication.java:454)
miko-paramer | at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:335)
miko-paramer | at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
miko-paramer | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1162)
miko-paramer | at org.springframework.boot.SpringApplication.run(SpringApplication.java:1151)
miko-paramer | at com.miko.paramer.ParamerApplication.main(ParamerApplication.java:18)
miko-paramer | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
miko-paramer | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
miko-paramer | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
miko-paramer | at java.lang.reflect.Method.invoke(Method.java:498)
miko-paramer | at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
miko-paramer | at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
miko-paramer | at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
miko-paramer | at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
miko-paramer exited with code 1
可以看到它profile
没有被替换并且在日志中看起来是大写的PROFILE
我该如何解决?
解决方案
ARGS
添加构建参数,它们是只能在构建过程中访问的环境变量。
根据您的用例,我认为您需要指定environment
not args
。
环境
添加环境变量。
尽管您始终可以使用以下解决方法:
ARG buildtime_variable=default_value
ENV env_var_name=$buildtime_variable
推荐阅读
- java - Flux.mergeOrdered() 不订购 Flux
- javascript - 如何将新值推送到猫鼬中的现有数组
- c++ - 无法将 Sf::text 对象推回 sf::text 向量
- android - Android:使用 Google Vision API 在脸上绘制地标
- android - GetExternalStoragePublicDirectory Android 10+ 升级问题:尝试从外部应用程序(OfficeLens)创建的位图到我的应用程序中
- angular - 使用 Angular 路由守卫时:'Observable
' 不可分配给类型 > '可观察的 ' - node.js - 有没有办法检索发生在对象上的所有活动?Getstream.io
- scala - 如何使用 spark 在商店中找到独特的产品?
- javascript - 使基于 html 和 svg 的重叠元素响应点击事件
- raspberry-pi - 如何使用 I2C 从 EEPROM 后端