---
title: 使用 Docker 部署 Postgres
createTime: 2025/12/25 10:52:34
permalink: /ops/docker/db/postgres/
---

## 在 Ubuntu 上部署 Postgres 实例

拉取 Postgres 镜像：
```bash
docker pull postgres
```

> [!IMPORTANT] 注意事项
> 从 **PostgreSQL 18+** 版本开始，官方镜像建议将数据目录挂载到 `/var/lib/postgresql` 而非 `/var/lib/postgresql/data`。如果你是从旧版本升级镜像，直接挂载旧目录会导致启动失败。

### 极简运行 Postgres 实例
```bash
docker run --restart=always -itd --name postgres -p 5432:5432 -e POSTGRES_PASSWORD=postgres postgres
```
解析：
- `--restart=always`：容器重启时自动启动。
- `-itd`：交互式模式运行容器，后台模式。
- `--name postgres`：为容器命名为 postgres。
- `-p 5432:5432`：将主机的 5432 端口映射到容器的 5432 端口。
- `-e POSTGRES_PASSWORD=postgres`：设置 Postgres 数据库的密码为 postgres。
- `postgres`：使用 Postgres 镜像。

### 配置 Postgres 持久化实例

#### 方案一：使用最新版本 (18+)
创建一个目录用于存储 Postgres 数据：
```bash
mkdir -p /data/postgres/
```
运行 Postgres 容器：
```bash
docker run --restart=always -itd \
  --name postgres \
  -p 5432:5432 \
  -e POSTGRES_PASSWORD=postgres \
  -v /data/postgres/:/var/lib/postgresql \
  postgres
```

#### 方案二：固定使用旧版本 (如 17)
如果你有现存的 `/var/lib/postgresql/data` 格式数据，建议固定版本：
```bash
docker run --restart=always -itd \
  --name postgres \
  -p 5432:5432 \
  -e POSTGRES_PASSWORD=postgres \
  -v /data/postgres/:/var/lib/postgresql/data \
  postgres:17
```
解析：
- `-v /data/postgres/:/var/lib/postgresql/data`：将主机的 /data/postgres/ 目录挂载到容器的 /var/lib/postgresql/data 目录，用于持久化存储数据。

#### 进入容器之后修改 postgres 用户密码
进入 Postgres 容器：
```bash
docker exec -it postgres psql -U postgres
```
解析：
- `docker exec -it postgres psql -U postgres`：进入 Postgres 容器的 psql 命令行界面，使用 postgres 用户进行登录。
修改 postgres 用户密码为 postgres：
```sql
ALTER USER postgres PASSWORD 'postgres';
```
