gpt4 book ai didi

docker - Docker 中的 Spring Boot

转载 作者:IT老高 更新时间:2023-10-28 21:22:47 26 4
gpt4 key购买 nike

我正在学习如何将 Docker 与 Spring Boot 应用程序一起使用。我遇到了一个小障碍,我希望有人能看到这个问题。我的应用程序严重依赖于环境特定属性文件中设置的 @Value。在我的/src/main/resources 我有三个属性文件

  • application.properties
  • application-local.properties
  • application-prod.properties

我通常使用以下方式启动我的应用程序:java -jar -Dspring.profiles.active=本地构建/libs/finance-0.0.1-SNAPSHOT.jar

并且读取“application-local.properties”并正常运行。但是,我正在使用这个 src/main/docker/DockerFile:

FROM frolvlad/alpine-oraclejdk8:slim
VOLUME /tmp
ADD finance-0.0.1-SNAPSHOT.jar finance.jar
RUN sh -c 'touch /finance.jar'
EXPOSE 8081
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /finance.jar" ]

然后我开始:

docker run -p 8081:80 username/reponame/finance -Dspring.profiles.active=local

我收到我的@Values 未找到的错误:原因:java.lang.IllegalArgumentException:无法解析值“${spring.datasource.driverClassName}”中的占位符“spring.datasource.driverClassName”

但是,该值确实存在于 *.local 和 *.prop 属性文件中。

spring.datasource.driverClassName=org.postgresql.Driver

我需要做一些特别的事情才能被取走吗?

更新:

根据 M. Deinum 的反馈,我将自己的初创公司更改为:

docker run -p 8081:80 username/reponame/finance -eSPRING_PROFILES_ACTIVE=local

但这在我意识到订单很重要之前不起作用,所以现在运行:

docker run -e"SPRING_PROFILES_ACTIVE=test" -p 8081:80 username/reponame/finance

工作得很好。

最佳答案

您可以使用 docker run 使用 Spring Profiles。使用 Spring 配置文件运行新创建的 Docker 镜像就像将环境变量传递给 Docker 运行命令一样简单

$ docker run -e "SPRING_PROFILES_ACTIVE=prod" -p 8080:8080 -t springio/gs-spring-boot-docker

您还可以在 Docker 容器中调试应用程序。可以使用 JPDA Transport 来调试应用程序。因此,我们将容器视为远程服务器。要启用此功能,请在 JAVA_OPTS 变量中传递 java 代理设置,并在容器运行期间将代理的端口映射到 localhost。

$ docker run -e "JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n" -p 8080:8080 -p 5005:5005 -t springio/gs-spring-boot-docker

资源链接: Spring Boot with Docker

Using spring profile with docker for nightly and dev build:

启动容器时只需设置环境变量 SPRING_PROFILES_ACTIVE。这将切换 Spring 应用程序的事件状态。

以下两行将在端口 8081 上启动最新的 Planets dev 构建,并在端口 8080 上启动 nightly 构建。

docker run -d -p 8080:8080 -e \"SPRING_PROFILES_ACTIVE=nightly\" --name nightly-planets-server planets/server:nightly
docker run -d -p 8081:8080 -e \"SPRING_PROFILES_ACTIVE=dev\" --name dev-planets-server planets/server:latest

这可以通过 CI 系统自动完成。开发服务器包含最新版本,并且每晚将每天部署一次...

关于docker - Docker 中的 Spring Boot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43707770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com