用docker运行postgresql是最轻量快速的本地数据库启动方式,适合开发测试和ci;通过docker run命令可启动带密码、端口映射和持久化数据卷的实例,并支持初始化脚本自动建库建用户。

直接用 Docker 运行 PostgreSQL 是最轻量、最快速的本地数据库启动方式,无需安装依赖、不污染系统环境,适合开发、测试和 CI 场景。
拉取并运行官方 PostgreSQL 镜像
Docker Hub 上的 postgres 官方镜像是最可靠的选择。执行以下命令即可启动一个带密码、指定端口和数据卷的实例:
- docker run -d \
- --name my-postgres \
- -e POSTGRES_PASSWORD=mysecretpassword \
- -p 5432:5432 \
- -v postgres-data:/var/lib/postgresql/data \
- -d postgres:15
说明:
- -e POSTGRES_PASSWORD 是必需环境变量,否则容器会启动失败;
- -v postgres-data:... 将数据持久化到命名卷,重启或重删容器也不丢数据;
- :15 显式指定版本(如 14、15、16),避免默认拉取 latest 导致行为不一致。
连接并验证数据库是否就绪
容器启动后,稍等几秒让 PostgreSQL 初始化完成(可通过 docker logs my-postgres 查看日志确认 “database system is ready to accept connections”)。然后用任意客户端连接:
- 命令行连接:
psql -h localhost -U postgres -p 5432,密码填你设的mysecretpassword; - GUI 工具(如 DBeaver、TablePlus)填写主机
localhost、端口5432、数据库postgres、用户postgres即可; - 应用连接 URL 示例:
postgresql://postgres:mysecretpassword@localhost:5432/postgres。
自定义初始化:自动建库、建用户、导入 SQL
首次启动时,PostgreSQL 容器会自动执行 /docker-entrypoint-initdb.d/ 目录下所有 .sh 或 .sql 文件。你可以通过挂载实现初始化自动化:
- 准备一个
init.sql文件,内容如:
CREATE DATABASE myapp;
CREATE USER myuser WITH PASSWORD 'mypass';
GRANT ALL PRIVILEGES ON DATABASE myapp TO myuser; - 启动时挂载:
-v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql:ro; - 注意:该目录只在 空数据目录首次初始化时 才执行,后续重启不会重复运行。
管理与调试常见操作
日常使用中几个高频命令:
- 查看日志:
docker logs my-postgres(加-f实时跟踪); - 进入容器执行 psql:
docker exec -it my-postgres psql -U postgres; - 备份数据(导出整个数据库):
docker exec my-postgres pg_dump -U postgres -d postgres > backup.sql; - 停止/删除:
docker stop my-postgres && docker rm my-postgres(数据卷仍保留,下次运行可复用)。
不复杂但容易忽略。











