简体   繁体   中英

Java application doesn't apply enviroment variable inside docker container

I am trying to deploy my application in docker (on Windows 10), in compose with a Postgres container. When I execute docker-compose up, I see the following log:

Starting postgres ... done
Recreating application ... done
Attaching to postgres, application
        postgres |
        postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
        postgres |
        postgres | 2021-08-20 14:51:49.721 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
        postgres | 2021-08-20 14:51:49.721 UTC [1] LOG:  listening on IPv6 address "::", port 5432
        postgres | 2021-08-20 14:51:49.741 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
        postgres | 2021-08-20 14:51:49.858 UTC [21] LOG:  database system was interrupted; last known up at 2021-08-20 14:50:34 UTC
        postgres | 2021-08-20 14:51:51.363 UTC [21] LOG:  database system was not properly shut down; automatic recovery in progress
        postgres | 2021-08-20 14:51:51.377 UTC [21] LOG:  redo starts at 0/1661A88
        postgres | 2021-08-20 14:51:51.377 UTC [21] LOG:  invalid record length at 0/1661AC0: wanted 24, got 0
        postgres | 2021-08-20 14:51:51.377 UTC [21] LOG:  redo done at 0/1661A88
        postgres | 2021-08-20 14:51:51.471 UTC [1] LOG:  database system is ready to accept connections

Then the container of my application tries to start and after the banner "Spring Boot" etc. I get an error:

application | 2021-08-20 14:52:23.440 ERROR 1 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.
application |
application | org.postgresql.util.PSQLException: Connection to localhost:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.
application |   at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:303) ~[postgresql-42.2.20.jar!/:42.2.20] 

Here is my docker-compose.yml

version: "3"

services:
  db:
    image: postgres:11.13-alpine
    container_name: postgres
    ports:
    - 5432:5432
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=my_db
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=root
      - PGDATA=/var/lib/postgresql/data/mnt
    restart: always
  app:
    build: .
    container_name: application
    ports:
      - 8085:8085
    environment:
      - POSTGRES_HOST=db
    restart: always
    links:
      - db

my Dockerfile:

FROM openjdk:11
ADD target/my-app.jar my-app.jar
EXPOSE 8085
ENTRYPOINT ["java" , "-jar", "my-app.jar"]

application.properties:

spring.datasource.url=jdbc:postgresql://${POSTGRES_HOST}:5432/my_db
spring.datasource.username=postgres
spring.datasource.password=root
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto=none
spring.liquibase.change-log=classpath:liquibase/changelog.xml
logging.level.org.springframework.jdbc.core = TRACE

What is the problem? Why my application looking for Postgres on localhost and doesn't apply enviroment variable? Inside docker container the host for postgres should be different, isn't it? I have even tried to hardcode postgres host in application.properties to jdbc:postgresql://db:5432/my_db, but it continue to use localhost. How can I fix it?

try to use in this way

environment:
        POSTGRES_HOST: db 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM