☰
Docker笔记之Windows WSL2 + Docker Desktop 安装 + Docker 部署 PostGIS 版 PostgreSQL 完整步骤
2026/10/9 7:18:18 网站建设 项目流程

一、前置:安装 WSL2(如已安装可跳)

  1. 以管理员身份打开 PowerShell
wsl--install

执行完成后重启电脑,WSL2 环境生效。

作用:Docker Desktop Windows 版底层依赖 WSL2 轻量 Linux 内核。

  1. 重启后验证 WSL 是否正常

打开 cmd 或者 PowerShell,输入:

wsl--status

如果显示默认版本为 2,说明 WSL2 已就绪。也可以运行:

wsl--list--verbose

查看已安装的发行版及其版本号。

二、安装 Docker Desktop

(1)普通 PowerShell 执行 winget 安装命令

winget install--id Docker.DockerDesktop--exact
  1. 出现协议询问输入y回车,自动下载并启动安装程序。

winget 调用微软商店(msstore)源下载软件,需要你同意微软商店的服务协议。提示说会上传你电脑的两位字母地区码(例如 CN 代表中国),只是地区标识,不会上传个人隐私文件。

直接键盘输入大写或者小写y,然后回车 ✅

  • 输入 y:同意,开始下载 Docker Desktop
  • 输入 n:拒绝,终止安装

  1. UAC 弹窗【是否允许应用更改设备】→ 点是

  2. 安装向导:保持Use WSL 2 instead of Hyper-V勾选,一路下一步。

  3. ✅安装完成,必须重启电脑

(2) 验证 Docker 是否正常

重启电脑后,从开始菜单打开 Docker Desktop,等待右下角 Docker 图标稳定(引擎启动成功)。

打开 PowerShell 执行:

docker--version

输出版本号即 Docker 安装成功。

三、Docker 拉取并启动【PostGIS+PostgreSQL】容器(GIS专用)

普通 Postgres 没有空间能力,postgis/postgis镜像内置 PostGIS 扩展,不用手动创建扩展。

PowerShell 换行符号:反引号`

docker run-d `--name gis-pg `-p 5432:5432 `-e POSTGRES_PASSWORD=123456 `-e POSTGRES_USER=postgres `-e POSTGRES_DB=gis_db `-e TZ=Asia/Shanghai `-v pgdata:/var/lib/postgresql/data`--restart=always ` postgis/postgis:16-3.4

参数说明:

  • -d:后台守护运行
  • --name gis-pg:容器名字,后续操作要用
  • -p 5432:5432:端口映射,本机 5432 映射容器内 5432
  • POSTGRES_PASSWORD=123456:数据库密码,可自行修改
  • POSTGRES_USER=postgres:用户名
  • POSTGRES_DB=gis_db:初始化自动创建数据库名
  • TZ=Asia/Shanghai:时区东八区
  • -v pgdata:/var/lib/postgresql/data:数据持久化,删除容器数据不会丢
  • --restart=always:Docker 开机自动启动数据库
  • postgis/postgis:16-3.4:镜像,PG16 + PostGIS 3.4

执行:

docker run-d--name gis-pg-p 5432:5432-e POSTGRES_PASSWORD=123456-e POSTGRES_USER=postgres-e POSTGRES_DB=gis_db-e TZ=Asia/Shanghai-v pgdata:/var/lib/postgresql/data--restart=always postgis/postgis:16-3.4

报错原因

国内直连docker.io(Docker Hub)超时,网络访问不到国外镜像仓库,解决办法:配置国内镜像加速器。

步骤 1:打开 Docker Desktop 设置

  1. 打开 Docker Desktop,点击右上角 ⚙️Settings
  2. 找到Docker Engine(引擎配置)
  3. 把里面的 JSON 全部替换成下面这段(国内镜像源)
{"builder":{"gc":{"defaultKeepStorage":"20GB","enabled":true}},"experimental":false,"registry-mirrors":["https://ccr.ccs.tencentyun.com","https://docker.1panel.live","https://dockerproxy.com","https://docker.m.daocloud.io"]}
  1. 点右下角Apply & restart保存并重启 Docker

⚠️ JSON 格式不能写错,逗号、引号不能少,否则 Docker 启动失败。

步骤 2:重启完成后,重新执行拉取命令

docker run-d--name gis-pg-p 5432:5432-e POSTGRES_PASSWORD=123456-e POSTGRES_USER=postgres-e POSTGRES_DB=gis_db-e TZ=Asia/Shanghai-v pgdata:/var/lib/postgresql/data--restart=always postgis/postgis:16-3.4

查看容器运行状态

dockerps

看到gis-pg列表代表数据库正常启动。

  • STATUS:Up 38 seconds→ 容器正在运行
  • PORTS:0.0.0.0:5432->5432/tcp→ 宿主机 5432 端口映射成功,可以外部连接

四、数据库连接信息(DBeaver / DataGrip / SpringBoot)

配置项值
hostlocalhost
port5432
databasegis_db
usernamepostgres
password123456

验证 PostGIS 扩展是否可用

进入数据库内部验证 PostGIS,执行这条命令:

dockerexec-itgis-pg psql-Upostgres-dgis_db

进入 psql 命令行后,执行 SQL 检查 PostGIS:

SELECTPostGIS_Version();

能输出版本号就代表 PostGIS 扩展(可存储坐标、做空间查询)已经装好。输入\q退出 psql。

五、容器版本切换

docker stop gis-pg只会停止容器,不会删除镜像,也不会删除镜像文件

  • 镜像:postgis/postgis:16-3.4还在你的电脑里,随时可以再起
  • 容器:gis-pg只是停机,只要不执行docker rm gis-pg,数据还保存在这个容器里,可以随时启动回来

👉 想两个容器同时保留(PG16 和 PG14),核心就是:容器名字不能一样、端口不能冲突

场景:保留 PG16,新建 PG14(两个共存)

  1. 停止当前 PG16 容器(gis-pg)
docker stop gis-pg

现在 gis-pg(PG16)处于停止状态,数据保留,随时可以docker start gis-pg恢复

  1. 新建 PG14 容器,换名字 + 换宿主机端口(避免 5432 冲突)

宿主机用5433映射容器 5432,这样两个数据库可以按需启动,甚至同时跑

docker run-d--name gis-pg14-p 5433:5432-e POSTGRES_PASSWORD=123456-e POSTGRES_USER=postgres postgis/postgis:14-3.4
  • 容器名:gis-pg14(和原来gis-pg区分)
  • 端口:本地访问 PG14 →localhost:5433
  • PG16(gis-pg)启动后是localhost:5432

切换使用

  • 想用 PG16:
dockerstartgis-pg

连接:localhost:5432

  • 想用 PG14(Navicat低版本时也可用):
dockerstartgis-pg14

连接:localhost:5433

⚠️ 如果两个同时 start,端口不会冲突,因为一个映射 5432,一个 5433,可以同时跑两个 PG。

查看全部容器(包括停止的)

dockerps-a

你会看到两个容器:gis-pg(PG16)、gis-pg14(PG14)

区分两个连接信息

  1. PG16(gis-pg):localhost:5432 → DBeaver 用
  2. PG14(gis-pg14):localhost:5433 → Navicat 老版本直接连,无 datlastsysoid 报错

原来的 PG16 容器完全不会丢,随时启停,互不影响。

六、常用运维命令

# 停止数据库dockerstop gis-pg# 启动数据库dockerstart gis-pg# 重启数据库dockerrestart gis-pg# 删除容器(数据卷pgdata保留,数据不会丢)dockerrmgis-pg# 进入容器内部psql命令行dockerexec-itgis-pg psql-Upostgres-dgis_db

七、总结

通过 WSL2 + Docker Desktop,你可以在 Windows 上快速获得一个带 PostGIS 空间扩展的 PostgreSQL 环境,非常适合 GIS 项目开发与测试。数据通过数据卷持久化,容器可随时重建而不丢失数据。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询