概述
开发中经常需要快速搭建一个带图形化管理界面的 PostgreSQL 环境。手动装 PG 再装 pgAdmin 太麻烦,而且版本容易冲突。用 Docker Compose 可以把数据库和管理面板一次性跑起来,数据还持久化。
这篇教程带你从零搭建 PostgreSQL 16 + pgAdmin 4 的完整环境。
准备工作
- 一台安装了 Docker 和 Docker Compose 的 Linux 服务器或本地机器
- 至少 512MB 内存
- 磁盘剩余空间 2GB 以上
检查 Docker 是否就绪:
docker --version
docker compose version
如果没装 Docker,先执行:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
注意:执行完 usermod 后要重新登录才能生效。
步骤
第一步:创建项目目录
mkdir -p ~/postgres-dev && cd ~/postgres-dev
第二步:编写 docker-compose.yml
services:
postgres:
image: postgres:16-alpine
container_name: pg-database
restart: always
environment:
POSTGRES_USER: admin
POSTGRES_PASSWORD: admin123
POSTGRES_DB: myapp
ports:
- "5432:5432"
volumes:
- pg_data:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4:latest
container_name: pgadmin
restart: always
environment:
PGADMIN_DEFAULT_EMAIL: admin@example.com
PGADMIN_DEFAULT_PASSWORD: admin123
ports:
- "5050:80"
depends_on:
- postgres
volumes:
pg_data:
这里做了三件事:
postgres服务拉取 PostgreSQL 16 精简版(alpine),设置密码和默认数据库,端口映射到 5432pgadmin服务提供 Web 管理界面,端口映射到 5050pg_data命名卷保证数据不随容器删除丢失
第三步:启动服务
docker compose up -d
等个十几秒,两个容器就跑起来了。查看状态:
docker compose ps
输出应该显示两个容器都是 Up 状态。
第四步:连接数据库
打开浏览器访问 http://你的IP:5050,用 admin@example.com 和 admin123 登录 pgAdmin。
登录后左侧点击 Add New Server:
- 名称随便填,比如
dev-db - Host 填
postgres(Docker 内部网络直接用服务名) - 端口 5432
- 用户名
admin - 密码
admin123
保存后就能在左侧看到数据库树形结构了。
命令行验证也可以:
docker exec -it pg-database psql -U admin -d myapp -c "SELECT version();"
能输出版本信息就说明一切正常。
常见问题
Q: 启动后 pgAdmin 打不开?
先检查端口占用:ss -tlnp | grep 5050。如果被占用了,改 docker-compose.yml 里的端口映射,比如改成 "5051:80"。
Q: 忘记 pgAdmin 密码怎么办?
停掉容器,删掉 pgAdmin 的数据卷(如果有配的话),重新启动。或者直接改 docker-compose.yml 里 PGADMIN_DEFAULT_PASSWORD 的值再 docker compose up -d。
Q: 怎么修改 PostgreSQL 的密码?
docker exec -it pg-database psql -U admin -c "ALTER USER admin WITH PASSWORD '新密码';"
Q: 数据持久化怎么做?
上面的配置已经用命名卷 pg_data 做了持久化。如果想把数据文件存到宿主机指定路径,把 pg_data: 那行改成 - /你的路径:/var/lib/postgresql/data。
Q: 想加一个自定义 SQL 初始化脚本?
在 postgres 服务同级建个 init.sql 文件,然后在 docker-compose.yml 里加一行:
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
容器首次启动时会自动执行这个脚本。
总结
一行 docker compose up -d 就搞定了数据库环境,不用碰系统包管理器,不污染本机。换台机器或者重装系统,直接把 docker-compose.yml 拷过去就能恢复。
试试把你的开发数据库也搬进容器?