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

时间:2017-04-05 15:47:57

标签: spring docker intellij-idea spring-boot dockerfile

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

我的 application.yml

server:
  port: 8080
  context-path: /mail
custom:
  greeting: Hello YML

Dockerfile

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

一个简单的 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;
  }
}

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

泊坞

  1. 未应用server.context-path属性。应用仍可使用 / ,而不是 / mail /
  2. custom.greeting属性不会从属性文件中读取,控制器会返回 {“greeting”:null} 而是 {“greeting”:“Hello YML”}
  3. 没有Docker

    1. 正确应用了上下文路径

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

3 个答案:

答案 0 :(得分:1)

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

app
   -main.jar
   -application.properties

您可以使用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"]

你的整个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

答案 1 :(得分:0)

将Application.yml重命名为application.yml。它引用了注释中使用的名称Application.yml。

Application.yml适用于寡妇,但在Linux容器内部会中断。

答案 2 :(得分:0)

对于上下文路径,您必须在属性文件中添加上下文路径。 在 application-default.properties 中:

server.servlet.contextPath = / myContext

然后构建您的项目,

mvn全新安装

然后创建一个docker映像并运行该映像。