2017-04-05 74 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容器內部中斷。

    相關問題