使用 Docker 搭建 Postgresql 数据库

拉取 Postgresql 镜像

1
docker pull postgres

创建本地卷

Docker 会自动在 /var/lib/docker/volume/ 路径下为主机上的卷创建一个目录。该卷可以在容器之间共享和重用, 且默认会一直存在。

1
2
3
4
5
docker volume list            # 列出 Docker 卷
docker volume rm pgdata       # 删除 Docker 卷

docker volume create pgdata   # 创建 Docker 卷
docker volume inspect pgdata  # 检查 Docker 卷

构建镜像容器

1
2
3
4
5
6
7
8
9
docker run -it \
	--name postgres \
	--restart always \
	-e TZ='Asia/Shanghai' \
	-e POSTGRES_PASSWORD='abc123' \
	-e ALLOW_IP_RANGE=0.0.0.0/0 \
	-v /home/postgres/data:/var/lib/postgresql \
	-p 55435:5432 \
	-d postgres
名称解释
--name自定义容器名称
--restart always设置容器在 docker 重启时自动启动容器
-e POSTGRES_PASSWORDPostgresql 数据库密码
-e ALLOW_IP_RANGE=0.0.0.0/0表示允许所有 IP 访问
-e TZ='Asia/Shanghai'设置时区
-v [path] : [path]本地目录映射 (本地目录 : 容器内路径)
-p 55435:5432端口映射 (主机端口 : 容器端口)
-d postgres镜像名称

进入 Postgres 容器

1
docker exec -it postgres bash

切换当前用户,再登录数据库

将当前 root 切换成 postgres

1
su postgres

输入用户名/密码执行完后,再根据提示输入

1
psql -U postgres -W

输入密码,登录成功

创建新用户

根据第五步,先切换到 Linux 用户 postgres,并执行如下 psql

1
2
3
4
create user test with password 'test';            # 创建数据库新用户
CREATE DATABASE testdb OWNER test;                # 创建用户数据库
GRANT ALL PRIVILEGES ON DATABASE testdb TO test;  # 将 testdb 数据库的所有权限都赋予 test
\q                                                # 使用命令 \q 退出 psql

注意:语句要以分号结尾。密码要用单引号括起来。