在Docker中安装Postgresql

有个服务挂在supabase上长期未用,然后发现已经过期,只保留备份文件,遂本地部署。

拉取镜像

1
docker pull postgres

创建本地卷

数据卷可以在容器之间共享和重用, 默认会一直存在,即使容器被删除(docker volume inspect pgdata可查看数据卷的本地位置,验证持久数据目录)你也不想数据库和容器一起消失吧

1
2
3
docker volume create pgdata

docker volume inspect pgdata

可以看到输出本地卷信息

1
2
3
4
5
6
7
8
9
10
11
12
13
root@rick:/home/rick# docker volume inspect pgdata
[
{
"CreatedAt": "2025-04-10T08:46:11Z",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/snap/docker/common/var-lib-docker/volumes/pgdata/_data",
"Name": "pgdata",
"Options": null,
"Scope": "local"
}
]
root@rick:/home/rick#

启动容器,使用持久数据存储启动 PostgreSQL 容器

启动时,需要将刚上个步骤创建的卷pgdata挂载到容器的/var/snap/docker/common/var-lib-docker/volumes/pgdata/_data目录。

  • run :创建并运行一个容器;
  • –name :指定容器名称。(容器名称 自己设置)
  • -e POSTGRES_PASSWORD=password,设置环境变量,指定数据库的登录口令为password(password 自己设置)
  • -p :指定宿主机和 Docker 容器端口映射,冒号前为宿主机端口号,另一个是容器端口号。(Docker的容器默认情况下只能由本地主机访问,即A主机上的容器不能被B主机访问,所以要做端口映射)(端口号 自己设置)
  • -d postgres:指定使用postgres作为镜像
1
docker run --name postgres -e POSTGRES_PASSWORD=123456 -p 5040:5040 -v pgdata:/var/snap/docker/common/var-lib-docker/volumes/pgdata/_data -d postgres

连接数据库

从容器连接

1
docker exec -it postgres /bin/bash

切换用户

1
su postgres

连接

1
psql

从主机连接

首先安装客户端sudo apt install postgresql-client

显示容器ip地址docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' 容器ID

连接容器:psql -U postgres -h 172.17.0.3

恢复备份文件

1
psql -U postgres -h 172.17.0.3 -f [email protected]