2017-04-05 200 views
2

当在Docker容器中运行时,Spring Boot不读取应用程序属性。Spring Boot无法读取Docker中的application.properties

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泊坞窗插件,自动映射端口8080(搬运工):18080(主机),使应用程序,可对HTTP ://本地主机:18080

泊坞

  1. 服务器。上下文路径属性不适用。应用程序仍然可以用/,而不是与/邮件/
  2. custom.greeting财产不能读取属性文件和控制器返回{“问候语”:空}代替{“问候语”:“你好阳明” }

没有泊坞

  • 上下文路径施加适当

  • custom.greeting属性返回由控制器适当

  • +0

    你的'application.yml'文件在哪里?它看起来不在类路径中,即没有包含在您在Docker镜像中发布的胖罐中。 –

    +0

    src/main/resources路径下的Application.yml,它位于类路径中。我还添加了@PropertySource注释并得到了同样的问题 –

    +0

    添加'spring-boot-starter-actuator'并查看端点'/ env'告诉您有关您的环境的信息。你应该看到类似于''applicationConfig:[classpath:/application.yml]“:{”custom.greeting“:”...“}' –

    回答

    0

    您必须添加application.properties文件中的泊坞窗/应用/目录。乌尔搬运工目录结构将是

    app 
        -main.jar 
        -application.properties 
    

    你可以这样做,通过使用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"] 
    

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

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

    Application.yml适用于widows,但会在linux容器内部中断。

    相关问题