Issue
I am writing a spring boot application that has a PostgreSQL database. I have an API in my controller that gets a file as
@RequestParam("file") MultipartFile file
and saves the file in a folder in the project's root folder. but when I'm using docker after calling the API no file is being saved in any folder or maybe I don't know where it is saved in the container. I am using docker-compose for running the project and here are my application.properties and docker-compose.yml files:
application.properties:
spring.datasource.driverClassName=org.postgresql.Driver
spring.datasource.platform=postgres
spring.datasource.url= jdbc:postgresql://localhost:5432/myDB?useSSL=true
spring.datasource.username= myusername
spring.datasource.password= mypassword
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation= true
spring.jpa.properties.hibernate.dialect= org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.ddl-auto= update
## MULTIPART (MultipartProperties)
# Enable multipart uploads
spring.servlet.multipart.enabled=true
# All files uploaded through the REST API will be stored in this directory
file.upload-dir=E:uploadedFilesOfMyProject
docker-compose:
version: '3.1'
services:
API:
image: 'myJar.jar'
ports:
- "8080:8080"
depends_on:
PostgreSQL:
condition: service_healthy
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://PostgreSQL:5432/myDB
- SPRING_DATASOURCE_USERNAME=myusername
- SPRING_DATASOURCE_PASSWORD=mypassword
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
PostgreSQL:
image: postgres
ports:
- "5432:5432"
environment:
- POSTGRES_PASSWORD=mypassword
- POSTGRES_USER=myusername
- POSTGRES_DB=myDB
healthcheck:
test: ["CMD-SHELL", "pg_isready -U myusername"]
interval: 10s
timeout: 5s
retries: 5
I have set the directory as follows in the application.properties and when I use postman to upload files, nothing is saved in this folder when the project is running by docker-compose up
file.upload-dir=E:uploadedFilesOfMyProject
where am I doing wrong? what did I misunderstand?
If anyone could help me I would be very appreciative.
Solution
this is the final docker-compose.yml file I used: I hope it will help others too:
version: "3.8"
services:
pg_db:
image: postgres
restart: always
volumes:
- "./postgres/data:/var/lib/postgresql/data"
ports:
- 5432:5432
environment:
POSTGRES_USER:
POSTGRES_PASSWORD:
POSTGRES_DB:
networks:
- product-net
api_service:
build: .
restart: always
ports:
- 8080:8080
depends_on:
- pg_db
networks:
- product-net
networks:
product-net:
driver: bridge
volumes:
pg_db:
driver: local
Answered By - mohsen
Answer Checked By - Cary Denson (JavaFixing Admin)