Docker笔记之Windows WSL2 + Docker Desktop 安装 + Docker 部署 PostGIS 版 PostgreSQL 完整步骤
一、前置安装 WSL2如已安装可跳以管理员身份打开 PowerShellwsl--install执行完成后重启电脑WSL2 环境生效。作用Docker Desktop Windows 版底层依赖 WSL2 轻量 Linux 内核。重启后验证 WSL 是否正常打开 cmd 或者 PowerShell输入wsl--status如果显示默认版本为 2说明 WSL2 已就绪。也可以运行wsl--list--verbose查看已安装的发行版及其版本号。二、安装 Docker Desktop1普通 PowerShell 执行 winget 安装命令winget install--id Docker.DockerDesktop--exact出现协议询问输入y回车自动下载并启动安装程序。winget 调用微软商店msstore源下载软件需要你同意微软商店的服务协议。提示说会上传你电脑的两位字母地区码例如 CN 代表中国只是地区标识不会上传个人隐私文件。直接键盘输入大写或者小写y然后回车 ✅输入 y同意开始下载 Docker Desktop输入 n拒绝终止安装UAC 弹窗【是否允许应用更改设备】→ 点是安装向导保持Use WSL 2 instead of Hyper-V勾选一路下一步。✅安装完成必须重启电脑2 验证 Docker 是否正常重启电脑后从开始菜单打开 Docker Desktop等待右下角 Docker 图标稳定引擎启动成功。打开 PowerShell 执行docker--version输出版本号即 Docker 安装成功。三、Docker 拉取并启动【PostGISPostgreSQL】容器GIS专用普通 Postgres 没有空间能力postgis/postgis镜像内置 PostGIS 扩展不用手动创建扩展。PowerShell 换行符号反引号docker run-d --name gis-pg -p 5432:5432 -e POSTGRES_PASSWORD123456 -e POSTGRES_USERpostgres -e POSTGRES_DBgis_db -e TZAsia/Shanghai -v pgdata:/var/lib/postgresql/data--restartalways postgis/postgis:16-3.4参数说明-d后台守护运行--name gis-pg容器名字后续操作要用-p 5432:5432端口映射本机 5432 映射容器内 5432POSTGRES_PASSWORD123456数据库密码可自行修改POSTGRES_USERpostgres用户名POSTGRES_DBgis_db初始化自动创建数据库名TZAsia/Shanghai时区东八区-v pgdata:/var/lib/postgresql/data数据持久化删除容器数据不会丢--restartalwaysDocker 开机自动启动数据库postgis/postgis:16-3.4镜像PG16 PostGIS 3.4执行docker run-d--name gis-pg-p 5432:5432-e POSTGRES_PASSWORD123456-e POSTGRES_USERpostgres-e POSTGRES_DBgis_db-e TZAsia/Shanghai-v pgdata:/var/lib/postgresql/data--restartalways postgis/postgis:16-3.4报错原因国内直连docker.ioDocker Hub超时网络访问不到国外镜像仓库解决办法配置国内镜像加速器。步骤 1打开 Docker Desktop 设置打开 Docker Desktop点击右上角 ⚙️Settings找到Docker Engine引擎配置把里面的 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]}点右下角Apply restart保存并重启 Docker⚠️ JSON 格式不能写错逗号、引号不能少否则 Docker 启动失败。步骤 2重启完成后重新执行拉取命令docker run-d--name gis-pg-p 5432:5432-e POSTGRES_PASSWORD123456-e POSTGRES_USERpostgres-e POSTGRES_DBgis_db-e TZAsia/Shanghai-v pgdata:/var/lib/postgresql/data--restartalways postgis/postgis:16-3.4查看容器运行状态dockerps看到gis-pg列表代表数据库正常启动。STATUSUp 38 seconds→ 容器正在运行PORTS0.0.0.0:5432-5432/tcp→ 宿主机 5432 端口映射成功可以外部连接四、数据库连接信息DBeaver / DataGrip / SpringBoot配置项值hostlocalhostport5432databasegis_dbusernamepostgrespassword123456验证 PostGIS 扩展是否可用进入数据库内部验证 PostGIS执行这条命令dockerexec-itgis-pg psql-Upostgres-dgis_db进入 psql 命令行后执行 SQL 检查 PostGISSELECTPostGIS_Version();能输出版本号就代表 PostGIS 扩展可存储坐标、做空间查询已经装好。输入\q退出 psql。五、容器版本切换docker stop gis-pg只会停止容器不会删除镜像也不会删除镜像文件镜像postgis/postgis:16-3.4还在你的电脑里随时可以再起容器gis-pg只是停机只要不执行docker rm gis-pg数据还保存在这个容器里可以随时启动回来 想两个容器同时保留PG16 和 PG14核心就是容器名字不能一样、端口不能冲突场景保留 PG16新建 PG14两个共存停止当前 PG16 容器gis-pgdocker stop gis-pg现在 gis-pgPG16处于停止状态数据保留随时可以docker start gis-pg恢复新建 PG14 容器换名字 换宿主机端口避免 5432 冲突宿主机用5433映射容器 5432这样两个数据库可以按需启动甚至同时跑docker run-d--name gis-pg14-p 5433:5432-e POSTGRES_PASSWORD123456-e POSTGRES_USERpostgres postgis/postgis:14-3.4容器名gis-pg14和原来gis-pg区分端口本地访问 PG14 →localhost:5433PG16gis-pg启动后是localhost:5432切换使用想用 PG16dockerstartgis-pg连接localhost:5432想用 PG14Navicat低版本时也可用dockerstartgis-pg14连接localhost:5433⚠️ 如果两个同时 start端口不会冲突因为一个映射 5432一个 5433可以同时跑两个 PG。查看全部容器包括停止的dockerps-a你会看到两个容器gis-pgPG16、gis-pg14PG14区分两个连接信息PG16gis-pglocalhost:5432 → DBeaver 用PG14gis-pg14localhost: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 项目开发与测试。数据通过数据卷持久化容器可随时重建而不丢失数据。