Docker 安装 PostgreSQL 14 新手教程
草稿状态:本文仅保存到 CSDN 草稿箱,待人工检查和实测后再决定是否发布。
摘要
本文使用 Docker 官方 postgres 镜像运行 PostgreSQL 14,完成命名卷持久化、数据库初始化、就绪检查、psql 连接、客户端连接、备份恢复和重启验证。示例密码只作为占位符,不能直接用于生产环境。
一、前置准备
docker version docker info确认 Docker 已启动,主机 5432 端口可用,并为数据库卷和备份文件预留空间。已有 PostgreSQL 服务时,不要直接复用 postgres 容器名和数据卷。
二、拉取官方镜像
docker pull postgres:14 docker image inspect postgres:14postgres 是 Docker Official Image,14 表示 PostgreSQL 14 系列。固定大版本有利于本地教程复现,但补丁版本仍应以实际镜像输出为准。
三、创建数据卷
docker volume create postgres_data docker volume inspect postgres_dataPostgreSQL 14 的数据目录挂载到 /var/lib/postgresql/data。命名卷独立于容器,但不是备份。
四、启动 PostgreSQL
替换示例密码后执行:
docker run -d --name postgres -p 5432:5432 -e POSTGRES_USER=appuser -e POSTGRES_PASSWORD=ChangeMe_123456 -e POSTGRES_DB=appdb -v postgres_data:/var/lib/postgresql/data --restart unless-stopped postgres:14POSTGRES_PASSWORD 通常是初始化必需项。POSTGRES_USER、POSTGRES_DB 和密码只在空数据目录第一次初始化时生效;复用已有卷时,修改环境变量不会自动修改现有用户和数据库。
如果 5432 被占用,可改为 15432:5432,客户端端口也要改成 15432。
五、确认数据库就绪
docker ps --filter "name=postgres" docker exec postgres pg_isready -U appuser -d appdb docker logs --tail 100 postgrespg_isready 返回 accepting connections 后再连接数据库。容器状态 Up 不能单独证明 PostgreSQL 已经可以接受连接。
六、进入 psql
docker exec -it postgres psql -U appuser -d appdb在 psql 中执行:
SELECT version(); \l \dt \q七、创建测试表并插入数据
示例表包含项目常用的备注、删除状态、创建修改人和时间字段:
CREATE TABLE demo_user ( id BIGSERIAL PRIMARY KEY, user_name VARCHAR(100) NOT NULL, remark VARCHAR(500), delete_status SMALLINT NOT NULL DEFAULT 0 CHECK (delete_status IN (0, 1)), create_user_no BIGINT, modified_user_no BIGINT, create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, modified_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); INSERT INTO demo_user (user_name, remark) VALUES ('alice', 'Docker PostgreSQL test'); SELECT id, user_name, create_time FROM demo_user WHERE delete_status = 0;modified_time 不会自动像某些 MySQL 定义那样更新,业务更新时应显式维护,或创建触发器。
八、使用 Navicat 或 DBeaver 连接
| 项目 | 值 |
|---|---|
| 主机 | 127.0.0.1 |
| 端口 | 5432 |
| 用户名 | appuser |
| 密码 | 启动容器时设置的密码 |
| 数据库 | appdb |
若使用 15432:5432,客户端端口填写 15432。
九、备份与恢复
备份:
docker exec postgres pg_dump -U appuser -d appdb > .\appdb-backup.sql恢复:
Get-Content .\appdb-backup.sql | docker exec -i postgres psql -U appuser -d appdb备份文件应保存到独立位置,并定期验证恢复,不要只依赖 Docker 卷。
十、重启验证
docker exec postgres psql -U appuser -d appdb -c "SELECT count(*) FROM demo_user;" docker restart postgres docker exec postgres pg_isready -U appuser -d appdb docker exec postgres psql -U appuser -d appdb -c "SELECT count(*) FROM demo_user;"两次数量一致,说明容器重启后数据仍能读取。
十一、修改密码和创建数据库
已有用户修改密码:
docker exec -it postgres psql -U appuser -d appdbALTER ROLE appuser WITH PASSWORD '新的强密码'; CREATE DATABASE otherdb; \q十二、常见问题
修改 POSTGRES_PASSWORD 没有生效
数据卷已经初始化,环境变量不会重新初始化数据库。使用 ALTER ROLE 修改密码,或在确认无数据后删除并重新创建卷。
连接失败
依次检查端口映射、容器日志和 pg_isready,不要先删除卷。
删除容器后数据还在吗
只删除容器、保留 postgres_data 时,数据通常仍在。删除卷会永久删除数据库文件。
十三、卸载
只删除容器:
docker rm -f postgres确认数据不再需要后:
docker volume rm postgres_data docker image rm postgres:14十四、官方资料
- PostgreSQL Docker Official Image
- PostgreSQL 官方文档
- Docker Volumes 官方文档
总结
本教程完成了 PostgreSQL 14 镜像拉取、命名卷持久化、初始化、就绪检查、客户端连接、备份恢复和重启验证。密码、端口、补丁版本和备份策略必须根据实际环境人工确认。
