Change `PGDATA` in 18+ to `/var/lib/postgresql/MAJOR/docker`
This is a pretty large breaking change, which is why this only makes the change in 18+ (which is currently in pre-release stages, and not due for GA until September, and pre-release `PGDATA` directories are officially *not supported* on the GA release anyhow). Concretely, this changes `PGDATA` to `/var/lib/postgresql/MAJOR/docker`, which matches the pre-existing convention/standard of the `pg_ctlcluster`/`postgresql-common` set of commands, and frankly is what we should've done to begin with, in a classic case of Chesterton's Fence (https://en.wikipedia.org/wiki/Wikipedia:Chesterton%27s_fence). This also changes the `VOLUME` to `/var/lib/postgresql`, which should be more reasonable, and make the upgrade constraints more obvious. For any users who have been testing the pre-releases, the simplest way to keep your existing data directory is going to be to add `PGDATA=/var/lib/postgresql/data` as an environment variable on your container or adjust your bind-mount from `/var/lib/postgresql/data` to `/var/lib/postgresql/18/docker`, but the *best* way is going to be to refactor your host directory such that your data lives at `18/docker` inside and you can then mount directly to `/var/lib/postgresql` (possibly setting `PGDATA=/var/lib/postgresql/MAJOR/docker` as well, if you want to go overboard on being explicit).
This commit is contained in:
parent
c257dcc6cf
commit
b9a533c87b
|
|
@ -190,10 +190,13 @@ RUN set -eux; \
|
||||||
|
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
||||||
|
|
||||||
ENV PGDATA /var/lib/postgresql/data
|
#
|
||||||
# this 1777 will be replaced by 0700 at runtime (allows semi-arbitrary "--user" values)
|
# NOTE: in 18+, PGDATA has changed to match the pg_ctlcluster standard directory structure, and the VOLUME has moved from /var/lib/postgresql/data to /var/lib/postgresql
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 1777 "$PGDATA"
|
#
|
||||||
VOLUME /var/lib/postgresql/data
|
ENV PGDATA /var/lib/postgresql/18/docker
|
||||||
|
RUN ln -svT . /var/lib/postgresql/data # https://github.com/docker-library/postgres/pull/1259#issuecomment-2215477494
|
||||||
|
VOLUME /var/lib/postgresql
|
||||||
|
# ("/var/lib/postgresql" is already pre-created with suitably usable permissions above)
|
||||||
|
|
||||||
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
||||||
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
||||||
|
|
|
||||||
|
|
@ -190,10 +190,13 @@ RUN set -eux; \
|
||||||
|
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
||||||
|
|
||||||
ENV PGDATA /var/lib/postgresql/data
|
#
|
||||||
# this 1777 will be replaced by 0700 at runtime (allows semi-arbitrary "--user" values)
|
# NOTE: in 18+, PGDATA has changed to match the pg_ctlcluster standard directory structure, and the VOLUME has moved from /var/lib/postgresql/data to /var/lib/postgresql
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 1777 "$PGDATA"
|
#
|
||||||
VOLUME /var/lib/postgresql/data
|
ENV PGDATA /var/lib/postgresql/18/docker
|
||||||
|
RUN ln -svT . /var/lib/postgresql/data # https://github.com/docker-library/postgres/pull/1259#issuecomment-2215477494
|
||||||
|
VOLUME /var/lib/postgresql
|
||||||
|
# ("/var/lib/postgresql" is already pre-created with suitably usable permissions above)
|
||||||
|
|
||||||
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
||||||
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
||||||
|
|
|
||||||
|
|
@ -183,10 +183,13 @@ RUN set -eux; \
|
||||||
|
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
||||||
|
|
||||||
ENV PGDATA /var/lib/postgresql/data
|
#
|
||||||
# this 1777 will be replaced by 0700 at runtime (allows semi-arbitrary "--user" values)
|
# NOTE: in 18+, PGDATA has changed to match the pg_ctlcluster standard directory structure, and the VOLUME has moved from /var/lib/postgresql/data to /var/lib/postgresql
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 1777 "$PGDATA"
|
#
|
||||||
VOLUME /var/lib/postgresql/data
|
ENV PGDATA /var/lib/postgresql/18/docker
|
||||||
|
RUN ln -svT . /var/lib/postgresql/data # https://github.com/docker-library/postgres/pull/1259#issuecomment-2215477494
|
||||||
|
VOLUME /var/lib/postgresql
|
||||||
|
# ("/var/lib/postgresql" is already pre-created with suitably usable permissions above)
|
||||||
|
|
||||||
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
||||||
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
||||||
|
|
|
||||||
|
|
@ -183,10 +183,13 @@ RUN set -eux; \
|
||||||
|
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
||||||
|
|
||||||
ENV PGDATA /var/lib/postgresql/data
|
#
|
||||||
# this 1777 will be replaced by 0700 at runtime (allows semi-arbitrary "--user" values)
|
# NOTE: in 18+, PGDATA has changed to match the pg_ctlcluster standard directory structure, and the VOLUME has moved from /var/lib/postgresql/data to /var/lib/postgresql
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 1777 "$PGDATA"
|
#
|
||||||
VOLUME /var/lib/postgresql/data
|
ENV PGDATA /var/lib/postgresql/18/docker
|
||||||
|
RUN ln -svT . /var/lib/postgresql/data # https://github.com/docker-library/postgres/pull/1259#issuecomment-2215477494
|
||||||
|
VOLUME /var/lib/postgresql
|
||||||
|
# ("/var/lib/postgresql" is already pre-created with suitably usable permissions above)
|
||||||
|
|
||||||
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
||||||
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
||||||
|
|
|
||||||
|
|
@ -212,10 +212,20 @@ RUN set -eux; \
|
||||||
|
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
||||||
|
|
||||||
|
{{ if .major >= 18 then ( -}}
|
||||||
|
#
|
||||||
|
# NOTE: in 18+, PGDATA has changed to match the pg_ctlcluster standard directory structure, and the VOLUME has moved from /var/lib/postgresql/data to /var/lib/postgresql
|
||||||
|
#
|
||||||
|
ENV PGDATA /var/lib/postgresql/{{ .major | tostring }}/docker
|
||||||
|
RUN ln -svT . /var/lib/postgresql/data # https://github.com/docker-library/postgres/pull/1259#issuecomment-2215477494
|
||||||
|
VOLUME /var/lib/postgresql
|
||||||
|
# ("/var/lib/postgresql" is already pre-created with suitably usable permissions above)
|
||||||
|
{{ ) else ( -}}
|
||||||
ENV PGDATA /var/lib/postgresql/data
|
ENV PGDATA /var/lib/postgresql/data
|
||||||
# this 1777 will be replaced by 0700 at runtime (allows semi-arbitrary "--user" values)
|
# this 1777 will be replaced by 0700 at runtime (allows semi-arbitrary "--user" values)
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 1777 "$PGDATA"
|
RUN install --verbose --directory --owner postgres --group postgres --mode 1777 "$PGDATA"
|
||||||
VOLUME /var/lib/postgresql/data
|
VOLUME /var/lib/postgresql/data
|
||||||
|
{{ ) end -}}
|
||||||
|
|
||||||
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
||||||
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
||||||
|
|
|
||||||
|
|
@ -183,10 +183,20 @@ RUN set -eux; \
|
||||||
|
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
RUN install --verbose --directory --owner postgres --group postgres --mode 3777 /var/run/postgresql
|
||||||
|
|
||||||
|
{{ if .major >= 18 then ( -}}
|
||||||
|
#
|
||||||
|
# NOTE: in 18+, PGDATA has changed to match the pg_ctlcluster standard directory structure, and the VOLUME has moved from /var/lib/postgresql/data to /var/lib/postgresql
|
||||||
|
#
|
||||||
|
ENV PGDATA /var/lib/postgresql/{{ .major | tostring }}/docker
|
||||||
|
RUN ln -svT . /var/lib/postgresql/data # https://github.com/docker-library/postgres/pull/1259#issuecomment-2215477494
|
||||||
|
VOLUME /var/lib/postgresql
|
||||||
|
# ("/var/lib/postgresql" is already pre-created with suitably usable permissions above)
|
||||||
|
{{ ) else ( -}}
|
||||||
ENV PGDATA /var/lib/postgresql/data
|
ENV PGDATA /var/lib/postgresql/data
|
||||||
# this 1777 will be replaced by 0700 at runtime (allows semi-arbitrary "--user" values)
|
# this 1777 will be replaced by 0700 at runtime (allows semi-arbitrary "--user" values)
|
||||||
RUN install --verbose --directory --owner postgres --group postgres --mode 1777 "$PGDATA"
|
RUN install --verbose --directory --owner postgres --group postgres --mode 1777 "$PGDATA"
|
||||||
VOLUME /var/lib/postgresql/data
|
VOLUME /var/lib/postgresql/data
|
||||||
|
{{ ) end -}}
|
||||||
|
|
||||||
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
COPY docker-entrypoint.sh docker-ensure-initdb.sh /usr/local/bin/
|
||||||
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
RUN ln -sT docker-ensure-initdb.sh /usr/local/bin/docker-enforce-initdb.sh
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue