【发布时间】:2017-09-28 04:47:15
【问题描述】:
我正在学习如何将 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 用户名/reponame/finance -Dspring.profiles.active=本地
我收到我的@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 用户名/reponame/finance -eSPRING_PROFILES_ACTIVE=本地
但这在我意识到订单很重要之前不起作用,所以现在运行:
docker run -e"SPRING_PROFILES_ACTIVE=test" -p 8081:80 用户名/reponame/finance
工作得很好。
【问题讨论】:
-
尝试将
ENV SPRING_PROFILES_ACTIVE=local添加到您的 Docker 文件中 -
-Dspring.profiles.active显然对 docker 的作用很小。而是使用-e来传递环境变量。请改用-e SPRING_PROFILES_ACTIVE=local。 -
M. Deinum,如果您将此作为答案,我将很乐意接受。感谢您的帮助!
-
在我的情况下,问题在于启动应用程序的 Dockerfile 中的 CMD 字符串。我将配置文件存储在标准路径之外(不在资源文件夹中),因此在将
-Dspring.config.location=/app/conf/添加到启动字符串后,问题就解决了。启动字符串变成了这样:CMD java -Dspring.config.location=/app/conf/ -jar lib/application.jar
标签: docker spring-boot dockerfile