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