docker 离线安装postgres+postgis实践
文章目录
- 前言
- 一、离线安装docker
- 二、导出导入PG镜像
- 1.导出
- 2.导入
- 三、启动容器
- 四、验证与测试
前言
在企业内网环境中部署地理信息系统(GIS)时,常常面临网络隔离导致无法在线拉取 Docker 镜像的问题。
本文将详细介绍如何通过离线方式完成 PostgreSQL+PostGIS 的完整部署。
一、离线安装docker
安装docker
二、导出导入PG镜像
如果我们的目标服务器是内网,那么没办法pull镜像。我们可以在其它环境pull镜像后,导出来,然后再传到目标服务器。离线安装好docker容器后,在导入。这里直接提供PG镜像(内含postgis),下载即可。没有积分的私信我,浇个朋友。
PG_VERSION=14.5-1
POSTGIS_VERSION=3.2.3
1.导出
#查看要导出的镜像
docker images
#导出
docker save postgis/postgis -o pg_14-3.2.tar
2.导入
docker load -i pg_14-3.2.tar
三、启动容器
创建数据卷,保存容器内数据
docker volume create postgis_data;
通过在 /etc/docker/daemon.json 中设置 data-root 参数,就已经将 Docker 的默认存储路径从 /var/lib/docker 修改为 /data/server/docker。这意味着:
- 所有数据卷(volumes) 将存储在 /data/server/docker/volumes/ 目录下
- 镜像(images) 和 容器(containers) 的数据也会存储在该路径下的对应子目录
- 之前创建的 postgis_data 卷会被移动到新路径(如果在修改配置前已创建,则需要重启 Docker 后生效)
启动容器
docker run -d \--privileged \--restart always \-e ALLOW_IP_RANGE=0.0.0.0/0 \-e POSTGRES_USER=system \-e POSTGRES_PASSWORD=liaoning@Gsafety.123 \-p 54321:5432 \--name postgis \-v postgis_data:/var/lib/postgresql/data \【镜像id】;
docker run
: 运行一个新的容器。-d
: 在后台运行容器,即以守护进程方式运行。--privileged
: 赋予容器特权,可以执行一些特殊操作,如访问宿主机的设备。--restart always
: 设置容器的重启策略为始终自动重启。ALLOW_IP_RANGE=0.0.0.0/0
: 允许所有ip访问-p 54321:5432
: 将容器内部的 5432 端口映射到宿主机的 54321 端口,用于访问 PostgreSQL 数据库。--name postgis
: 为容器指定一个名称,即 “postgis”。-v postgis_data:/var/lib/postgresql/data
: 创建一个数据卷,将容器内的 /var/lib/postgresql/data 目录挂载到名为 “postgis_data” 的数据卷上,用于持久化存储数据库数据。-e POSTGRES_USER=postgres
: 指定用户名-e POSTGRES_PASSWORD=Postgis@123
: 设置 PostgreSQL 数据库的密码为 “Postgis@123”,通过环境变量传递给容器。【镜像id】
: docker images 查看。
四、验证与测试
# 进入容器内部
docker exec -it postgis bash# 注意密码需要用单引号包裹,避免 @ 被解析 -U 用户名 -d 数据库名
psql -h localhost -p 5432 -U postgres -d postgres -W# 输入密码:Postgis@123# 验证PostGIS扩展
SELECT PostGIS_Version();
外部链接测试直接navicat链接即可,注意服务器防火墙是否关闭。