如何在 docker run 命令中将 Java 选项/变量传递给 Springboot 应用程序解决方案 1解决方案 2

我有一个Spring Boot应用程序,它使用配置文件在不同的环境中进行配置。我想将此配置文件信息作为参数传递给我的命令。我该怎么做?docker run

这是我的 dockerfile

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/demo-app-1.0-SNAPSHOT.jar

COPY ${JAR_FILE} /opt/lib/demo-app.jar

EXPOSE 80

# ENTRYPOINT ["java","-Dspring.profiles.active=dockerdev","-jar","/opt/lib/demo-app.jar"]
# Above line works, but not desired as profile will change in diff envs
ENTRYPOINT ["java","-jar","/opt/lib/demo-app.jar"]

我已经尝试了以下方法,但是,没有一个有效

docker run -p 8000:80 demo-app -Dspring.profiles.active=dockerdev

docker run -p 8000:80 demo-app --rm -e JAVA_OPTS='-Dspring.profiles.active=dockerdev'

请帮忙。

澄清:我正在使用多个配置文件。因此,我不希望在应用程序或 docker 文件中提及活动配置文件。相反,我想使用相同的应用程序和 docker 文件,并在不同的环境中运行它,并传递要在 docker run 命令中使用的活动配置文件。如果上面有任何没有澄清这一点,请道歉。


答案 1

解决方案 1

您可以使用 option 将配置中的任何属性传递到 docker 容器,从而覆盖配置中的任何属性。如外部化配置中所述,环境变量名称应大写并使用下划线进行拆分。例如,要传递属性,您可以在容器运行期间使用环境变量:-espring.profiles.activeSPRING_PROFILES_ACTIVE

docker run -p 8000:80 -e SPRING_PROFILES_ACTIVE=dockerdev demo-app

这个变量应该由Spring从环境中自动选择。

解决方案 2

将 Dockerfile 更改为 :

FROM openjdk:8-jdk-alpine
ARG JAR_FILE=target/demo-app-1.0-SNAPSHOT.jar

# environment variable with default value
ENV SPRING_PROFILE=dev

COPY ${JAR_FILE} /opt/lib/demo-app.jar

EXPOSE 80

#run with environment variable
ENTRYPOINT java -Dspring.profiles.active=$SPRING_PROFILE jar /opt/lib/demo-app.jar

然后运行传递环境变量的容器:

docker run -p 8000:80 --rm -e SPRING_PROFILE=dockerdev demo-app

答案 2

利用 springboot 中的 application.properties 来覆盖来自外部的任何变量。我们在生产环境中大量使用它。

您需要:

  • 将您的更改为:ENTRYPOINT
ENTRYPOINT ["java","-jar","/opt/lib/demo-app.jar","--spring.config.additional-location=/application.properties"]
  • 创建包含以下内容的文件:application.properties
spring.profiles.active=dockerdev

您还可以覆盖 springboot 代码中使用的任何变量,也可以覆盖 springboot 特定的变量,如此处所述。application.properties

  • 同时将您的命令更改为:docker run
docker run -itd -v /path/to/application.properties:/application.properties image-name

因此,从主机到您的 docker 容器中将安装到您的 docker 容器中。application.properties

注意:如果不起作用,请尝试选项。--spring.config.additional-location--spring.config.location

希望这有帮助。


推荐