Skip to content

Fix Alpine missing /var/lib/postgresql/data mounts#1409

Merged
yosifkit merged 1 commit intodocker-library:masterfrom
infosiftr:mountpoint-fallback
Apr 21, 2026
Merged

Fix Alpine missing /var/lib/postgresql/data mounts#1409
yosifkit merged 1 commit intodocker-library:masterfrom
infosiftr:mountpoint-fallback

Conversation

@tianon
Copy link
Copy Markdown
Member

@tianon tianon commented Apr 21, 2026

This adds a mountinfo fallback that mimics coreutils.

Alternatively, we could just install coreutils and get the "real" mountpoint command.

Closes #1400

This adds a `mountinfo` fallback that mimics coreutils.
@tianon
Copy link
Copy Markdown
Member Author

tianon commented Apr 21, 2026

Before:

$ docker run -it --rm --pull=always -v /var/lib/postgresql/data -e POSTGRES_PASSWORD=example postgres:18-alpine
...
2026-04-21 18:04:38.822 UTC [1] LOG:  starting PostgreSQL 18.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 15.2.0) 15.2.0, 64-bit
2026-04-21 18:04:38.822 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
2026-04-21 18:04:38.822 UTC [1] LOG:  listening on IPv6 address "::", port 5432
2026-04-21 18:04:38.825 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"

After:

$ docker run -it --rm --pull=always -v /var/lib/postgresql/data -e POSTGRES_PASSWORD=example --mount type=bind,src="$PWD/docker-entrypoint.sh",dst=/usr/local/bin/docker-entrypoint.sh,ro postgres:18-alpine
18-alpine: Pulling from library/postgres
Digest: sha256:52098013b4b64a746626437d38afc03cabff6cdeb4d3d92e2342aa95f0ce56ea
Status: Image is up to date for postgres:18-alpine
Error: in 18+, these Docker images are configured to store database data in a
       format which is compatible with "pg_ctlcluster" (specifically, using
       major-version-specific directory names).  This better reflects how
       PostgreSQL itself works, and how upgrades are to be performed.

       See also https://github.com/docker-library/postgres/pull/1259

       Counter to that, there appears to be PostgreSQL data in:
         /var/lib/postgresql/data (unused mount/volume)

       This is usually the result of upgrading the Docker image without
       upgrading the underlying database using "pg_upgrade" (which requires both
       versions).

       The suggested container configuration for 18+ is to place a single mount
       at /var/lib/postgresql which will then place PostgreSQL data in a
       subdirectory, allowing usage of "pg_upgrade --link" without mount point
       boundary issues.

       See https://github.com/docker-library/postgres/issues/37 for a (long)
       discussion around this process, and suggestions for how to do so.

@autorejecttop
Copy link
Copy Markdown

Finally, haha

I was crazy trying to find out why all my data was gone when using postgres:18.3-alpine3.23

I thank you in behalf of the future devs that may stumble upon this silent nightmare

Copy link
Copy Markdown
Member

@yosifkit yosifkit left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Alternatively, we could just install coreutils and get the "real" mountpoint command.

I don't think it is worth the extra space and this awk is simple enough, so LGTM

@yosifkit yosifkit merged commit 2353f03 into docker-library:master Apr 21, 2026
32 checks passed
@yosifkit yosifkit deleted the mountpoint-fallback branch April 21, 2026 22:02
tianon pushed a commit to docker-library/official-images that referenced this pull request Apr 21, 2026
Changes:

- docker-library/postgres@2353f03: Merge pull request docker-library/postgres#1409 from infosiftr/mountpoint-fallback
- docker-library/postgres@3b6b5fc: Fix Alpine missing `/var/lib/postgresql/data` mounts

Co-authored-by: Docker Library Bot <doi+docker-library-bot@docker.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PostgreSQL 18: OLD_DATABASES detection fails to find data in /var/lib/postgresql/data/18/docker/ causing silent data loss on container recreation

3 participants