Hi I’ve been running Docker on my Ubuntu machine for a while to run a simple java backend/postgres database app. The data for the database is mounted in a volume and everything stood up with the following docker-compose file:
version: '3.4'
services:
postgres:
image: postgres:14.1
restart: on-failure
volumes:
- postgres-spring-data:/var/lib/postgresql/data
environment:
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_USER: ${POSTGRES_USER}
spring:
image: some-spring-image
environment:
SPRING_DATASOURCE_URL: ${SPRING_DATASOURCE_URL}
SPRING_DATASOURCE_USERNAME: ${POSTGRES_USER}
SPRING_DATASOURCE_PASSWORD: ${POSTGRES_PASSWORD}
SERVER_PORT: 8084
ports:
- "8084:8084"
restart: on-failure
volumes:
postgres-spring-data:
I realised I needed to install buildx so that I could make the spring container image support arm64 as well as amd64. I installed docker desktop using the following guide: https://docs.docker.com/desktop/install/ubuntu/
After that, standing up my services reveals the volume has been emptied! No data exists in the postgres database any more.
I immediately looked in /var/lib/docker/volumes
which shows a large number of volumes including my postgres-spring-data
. The volume seems to be ~1.3GB large which seems way too much for an empty postgres database right?!
So then I thought maybe docker desktop was mounting the volume somewhere else and my volume was left in tact. But inspecting the container would suggest it is using that 1.3GB folder.
Can anyone tell me what’s going on here? Is there any way I can get my old postgres data back?
Thanks in advance.
EDIT: I’ve exec’d into the running postgres container and run SELECT oid as object_id, datname as database_name FROM pg_database;
this has listed the following databases:
object_id | database_name
-----------+-------------------
13757 | postgres
16384 | my-database (New empty DB created by spring when it found no data)
1 | template1
13756 | template0
however in the postgres volume in /var/lib/docker/volumes/tooling_postgres-spring-data/_data/base
we have the following folders (these should match OIDs of postgres databases):
/base
- /1
- /13756
- /13757
- /50959 (Seemingly not known by running postgres. ~950mb)
- /pgsql_temp
This makes me think (hope!) that the volume mounted in the running postgres is not the same as the one i’m looking at in my filesystem… very odd.