'What is the path for application.properties (or similar file) in docker container?

I am dockerizing springboot application(with PostgreSQL). I want to overwrite application.properties in docker container with my own application.properties. My docker-compose.yml file looks like this:

version: '2'
services:
  API:
    image: 'api-docker.jar'
    ports:
      - "8080:8080"
    depends_on:
      - PostgreSQL
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://PostgreSQL:5432/postgres
      - SPRING_DATASOURCE_USERNAME=postgres
      - SPRING_DATASOURCE_PASSWORD=password
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update

  PostgreSQL:
    image: postgres
    volumes:
      - C:/path/to/my/application.properties:/path/of/application.properties/in/container
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_DB=postgres

I am doing this to overwrite the application.properties in container with my application.properties file so that the data gets stored in localhost

I tried the path /opt/application.properties but it didn't work.



Solution 1:[1]

In case anybody comes across the same problem, here is the solution. I am trying to use my localhost database instead of in-memory database(storing it in container). This is my docker-compose.yml configuration

version: '2'
services:
  API:
    image: 'api-docker.jar' #(your jar file name)
    volumes:
      - path/to/new/application.properties:/config/env   
    ports:
      - "8080:8080"

You need to provide a new application.properties file which contains the configuration for storing the data into your local database(could be the copy of your actual application.properties). This file needs to be overwritten in the config file of the container and the path to that is /config/env (which is mentioned in the yml file)

Solution 2:[2]

You have two solutions:

1) First solution

Create application.properties with env variable

mycustomproperties1: ${MY_CUSTOM_ENV1}
mycustomproperties2: ${MY_CUSTOM_ENV2}

I advise you to create different application.properties (application-test,application-prod, etc...)

2) Another solution

Create docker file:

FROM debian:buster
RUN apt-get update --fix-missing && apt-get dist-upgrade -y
RUN apt install wget -y
RUN apt install apt-transport-https ca-certificates wget dirmngr gnupg software-properties-common -y
RUN wget -qO - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | apt-key add -
RUN add-apt-repository --yes https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
RUN apt update
RUN apt install adoptopenjdk-8-hotspot -y

ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","-Dspring.config.location="file:///config/application.properties","/app.jar"]

or add env variable in docker compose

SPRING_CONFIG_LOCATION=file:///config/application.properties

modify docker-compose:

version: '2'
services:
API:
  image: 'api-docker.jar'
  ports:
  - "8080:8080"
  depends_on:
  - PostgreSQL
  environment:
  - SPRING_DATASOURCE_URL=jdbc:postgresql://PostgreSQL:5432/postgres
  - SPRING_DATASOURCE_USERNAME=postgres
  - SPRING_DATASOURCE_PASSWORD=password
  - SPRING_JPA_HIBERNATE_DDL_AUTO=update
  - SPRING_CONFIG_LOCATION=file:///config/application.properties
  volumes:
  - C:/path/to/my/application.properties:/config/application.properties

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Renee
Solution 2 massimo lauri