1. 拉取镜像(国内加速)
bash
# 2025-10 已推送的 18 最新版
docker pull docker.1ms.run/postgres:18
2. 创建宿主机目录(父目录挂载方案)
bash
mkdir -p $HOME/pg18
# 赋予容器内 999 用户写权限(镜像默认 uid)
sudo chown -R 999:999 $HOME/pg18
3. 启动容器(关键:挂载父目录 /var/lib/postgresql)
bash
docker run -d --name postgres \
-e POSTGRES_PASSWORD=Root@123 \
-v $HOME/pg18:/var/lib/postgresql \
-p 5432:5432 \
--restart unless-stopped \
docker.1ms.run/postgres:18
| 参数 | 说明 |
|---|---|
-v $HOME/pg18:/var/lib/postgresql |
只挂父目录 ,镜像会在其下自动创建 18/main 版本子目录,兼容 18+ 的 pg_ctlcluster 结构 |
不再挂 /var/lib/postgresql/data |
避免与新版目录冲突,防止出现「unused mount」错误 |
4. 验证部署
bash
docker ps | grep postgres
# 状态 Up 即可
docker exec -it postgres psql -U postgres
# 出现 postgres=# 表示正常连接
5. 后续升级小版本(18.x → 18.y)
bash
docker pull docker.1ms.run/postgres:18
docker restart postgres
数据目录结构不变,自动兼容 。
6. 一键停/删(可选)
bash
docker stop postgres && docker rm postgres
宿主机 $HOME/pg18 仍会保留,重新运行第 3 步即可复用数据。
按照以上 5 步,即可在本地完成 PostgreSQL 18 的拉取与部署,并规避因目录结构变更导致的重启循环。