【问题标题】:Spring Boot Profile as Docker ARGS for Dynamic Run ParameterSpring Boot Profile 作为 Docker ARGS 用于动态运行参数
【发布时间】:2019-04-30 09:20:15
【问题描述】:

我有一个用于 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 中显示为大写

我该如何解决?

【问题讨论】:

  • 将 SPRING_PROFILES_ACTIVE 作为环境变量从 Compose 文件传递​​可能更容易

标签: java spring spring-boot docker docker-compose


【解决方案1】:

来自docker compose-file reference

ARGS

添加构建参数,它们是只能在构建过程中访问的环境变量。

根据您的用例,我认为您需要指定 environment 而不是 args

环境

添加环境变量。

虽然你总是可以有以下解决方法:

ARG buildtime_variable=default_value
ENV env_var_name=$buildtime_variable

来源:Setting Default Docker Environment Variables During Image Build

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 2014-10-15
    • 2021-12-31
    • 2020-12-21
    相关资源
    最近更新 更多