70 lines
2.2 KiB
Markdown
70 lines
2.2 KiB
Markdown
---
|
||
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';
|
||
```
|