Spring Boot 无法读取 Docker 中的 application.properties

Pav*_*kov 8 spring intellij-idea docker spring-boot dockerfile

在 Docker 容器中运行时,Spring Boot 不会读取应用程序属性。

我的应用程序.yml

server:
  port: 8080
  context-path: /mail
custom:
  greeting: Hello YML
Run Code Online (Sandbox Code Playgroud)

文件

FROM java:8-jre
VOLUME /tmp
COPY ./mail.jar /app/mail.jar
RUN sh -c 'touch /app/mail.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app/mail.jar" ]
EXPOSE 8080
Run Code Online (Sandbox Code Playgroud)

和一个简单的ApplicationController

@RestController
public class ApplicationController {

  private final Environment environment;

  @Autowired
  public ApplicationController(Environment environment) {
    this.environment = environment;
  }

  @RequestMapping(path = "/")
  public Hello hello() {
    final Hello hello = new Hello();
    hello.setGreeting(environment.getProperty("custom.greeting"));
    return hello;
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用 IntelliJ Docker 插件自动映射端口 8080(docker):18080(host) 并使应用程序在http://localhost:18080 上可用

码头工人

  1. 未应用 server.context-path 属性。应用程序仍然可用/而不是/mail/
  2. custom.greeting 属性不会从属性文件中读取,并且控制器返回{"greeting":null}而不是{"greeting":"Hello YML"}

没有 Docker

  1. 正确应用上下文路径

  2. custom.greeting 属性由控制器正确返回

use*_*529 1

您必须在 docker /app/ 目录中添加 application.properties 文件。你的 docker 目录结构将是

app
   -main.jar
   -application.properties
Run Code Online (Sandbox Code Playgroud)

您可以通过使用来做到这一点ADD /ur/local/location/application.properties /app/application.properties

那么最好将此命令写入您的 docker 文件中

ENTRYPOINT ["java" ,"-Djava.security.egd=file:/dev/./urandom --spring.config.location=classpath:file:/app/application-properties","-jar","/app/main.jar"]
Run Code Online (Sandbox Code Playgroud)

你的整个 dockerFile 应该是这样的:

FROM java:8-jre
VOLUME /tmp
COPY ./mail.jar /app/mail.jar
ADD /ur/local/location/application.properties /app/application.properties
ENTRYPOINT ["java" ,"-Djava.security.egd=file:/dev/./urandom --spring.config.location=classpath:file:/app/application-properties","-jar","/app/main.jar"]
EXPOSE 8080
Run Code Online (Sandbox Code Playgroud)