Files
SiMengWebSite_Notes/docs/notes/ops/docker/Postgres.md
祀梦 d08ce7e3e7 docs(docker): 更新文档结构并添加Postgres部署指南
重构docker文档目录结构,将数据库相关文档移动到db子目录,其他服务文档移动到other子目录
添加Postgres部署文档,包含基本运行和持久化配置方案
2025-12-30 14:40:56 +08:00

70 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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';
```