2016-09-27 30 views
0

我有一个Spring项目并使用application.yml文件来运行配置它。在配置文件中使用占位符并将其作为构建的泊坞窗图像运行时,它不会评估占位符,而在没有docker的情况下运行jar时,此功能正常工作。这里有什么可能是错的?Docker上的Spring,未使用配置占位符评估的环境变量

org.postgresql.util.PSQLException: FATAL: password authentication failed for user "${POSTGRES_DB_USER}" 

application.yml

server: 
    compression: 
    enabled: true 
    mime-types: application/json,application/xml,text/html,text/xml,text/plain 
    context-path:/
    port: 8085 

logging: 
    config: config/log4j2-spring.xml 

spring: 
    datasource: 
    url: jdbc:h2:./data/cdr 
    username: sa 
    password: 
    jpa: 
    hibernate: 
     ddl-auto: create-drop 

security: 
    user: 
    password: secretpassword 

--- 

spring: 
    profiles: docker 
    datasource: 
    url: jdbc:postgresql://postgres/databasename 
    username: ${POSTGRES_DB_USER} 
    password: ${POSTGRES_DB_PASS} 

泊坞窗,compose.yml

version: '2' 
services: 
    application: 
    image: domain.com:3000/application:0-SNAPSHOT 
    volumes: 
     - application:/application/logs 
    ports: 
     - 8085:8085 
    links: 
     - postgres 
    environment: 
     PASSWORD: secretpassword 
    postgres: 
    image: sameersbn/postgresql:9.5-2 
    volumes: 
     - postgres-data:/var/lib/postgresql 
    environment: 
     DB_NAME: databasename 
     DB_USER: user 
     DB_PASS: secretpassword 

volumes: 
    postgres-data: 
    driver: local 
    application-logs: 
    driver: local 
+0

贵'application'图像有'ENV PostgreSQL_DB_USER'等在Dockerfile中定义?环境变量不会保留在图像层中,除非它们用'ENV'明确设置。 –

+0

谢谢我必须研究这个问题,但是现在看起来好像占位符在从终端运行jar时也坏了,现在尝试创建一个裸露的Spring Spring项目来确认这一点。使用YAML文件而不是.properties文件时,占位符可能无法工作?这个文档很模糊,对于像我这样的Spring初学者来说,这非常混乱。 – Tirithen

+0

顺便说一下,如果我在postgres服务上设置了一个名为DB_USER的变量(如上所述),那么它应该可以作为POSTGRES_DB_USER(所有环境变量都获得uppsercase中的服务名称作为前缀)访问postgres服务链接,是不是这样? – Tirithen

回答

0

我想你想要这样的:

version: '2' 
services: 
    application: 
    image: domain.com:3000/application:0-SNAPSHOT 
    volumes: 
     - application-logs:/application/logs 
    ports: 
     - 8085:8085 
    environment: 
     POSTGRES_DB_USER: user 
     POSTGRES_DB_PASS: secretpassword 
    postgres: 
    image: sameersbn/postgresql:9.5-2 
    volumes: 
     - postgres-data:/var/lib/postgresql 
    environment: 
     DB_NAME: databasename 
     DB_USER: user 
     DB_PASS: secretpassword 

volumes: 
    postgres-data: {} 
    application-logs: {}