postgres容器化18+数据目录/var/lib/postgresql/data/

问题

postgres:18-alpine 数据映射提示Error: in 18+, these Docker images are configured to store database data in a这是 PostgreSQL 18 官方 Docker 镜像的数据目录结构变更导致的。

1
2
volumes:
- postgres_data:/var/lib/postgresql/data

但从 postgres:18 开始,官方镜像推荐/默认的数据目录改成了带主版本号的目录,因此旧的 PGDATA 挂载方式会触发这个保护错误。

解决

Docker Compose,建议改成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
services:
postgres:
image: postgres:18-alpine
restart: unless-stopped

environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: your_password
POSTGRES_DB: mydb

ports:
- "5432:5432"

volumes:
- postgres_data:/var/lib/postgresql

volumes:
postgres_data:

pg18-

1
2
3
4
5
6
postgres_data
└── /var/lib/postgresql/data
├── PG_VERSION
├── base
├── global
└── ...

pg18+

1cfdb6e018c6bf04aca310a752130d53.png

1
2
3
4
5
6
7
postgres_data
└── /var/lib/postgresql
└── 18
├── PG_VERSION
├── base
├── global
└── ...

所以 不要再直接把 Volume 挂到:/var/lib/postgresql/data,而是挂到:/var/lib/postgresql