はじめに
公式ドキュメントをちゃんと読めば問題ないのだけど、
個人的にハマったので備忘録として
注意点
-
volume
としてマウントするパスは/var/lib/postgresql/data
-
PGDATA
に指定するパスは/var/lib/postgresql/data/pgdata
サンプル
- Docker
$ docker run -d \
-e PGDATA=/var/lib/postgresql/data/pgdata \
-v ./data:/var/lib/postgresql/data \
postgres:14.2-alpine
- Docker compose
version: '3.8'
services:
db:
image: postgres:14.2-alpine
volumes:
- db-postgres:/var/lib/postgresql/data
environment:
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
db-postgres:
理由
Postgresの Docker ファイルで VOLUME
命令で /var/lib/postgresql/data
が指定されているので、
このパス以外でマウントするとデータが上手く保存されないことがある。
Docker composeでは問題ないが、Kubernetes などのコンテナサービスでボリュームをマウントしたときに、
:/ on /var/lib/postgresql type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,noresvport,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.3.3.235,local_lock=none,addr=10.3.3.237)
/dev/nvme0n1p1 on /var/lib/postgresql/data type xfs (rw,noatime,attr2,inode64,noquota)
のようになり、データが保存されない。
PGDATA
のパスは、/var/lib/postgresql/data/
配下であれば /var/lib/postgresql/data/db
などでも問題ない。
参考