PostgreSQL + pgAdmin 容器化搭建:一行命令搞定数据库环境

概述

开发中经常需要快速搭建一个带图形化管理界面的 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),设置密码和默认数据库,端口映射到 5432
  • pgadmin 服务提供 Web 管理界面,端口映射到 5050
  • pg_data 命名卷保证数据不随容器删除丢失

第三步:启动服务

docker compose up -d

等个十几秒,两个容器就跑起来了。查看状态:

docker compose ps

输出应该显示两个容器都是 Up 状态。

第四步:连接数据库

打开浏览器访问 http://你的IP:5050,用 admin@example.comadmin123 登录 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 拷过去就能恢复。

试试把你的开发数据库也搬进容器?