
nickblah/pgrouting本镜像为 PostgreSQL 数据库与 pgRouting 扩展的预集成 Docker 镜像,旨在提供自动化构建、版本同步且即开即用的地理空间路由分析环境。镜像基于官方 PostgreSQL 镜像构建,预安装并配置 pgRouting 扩展,支持所有当前受支持的 PostgreSQL 主版本(如 12、13、14、15、16),适用于需要快速部署地理空间路由功能的开发、测试及生产环境。
16-pgrouting-3.5、15-pgrouting-3.4),满足不同版本兼容性需求。pgrouting、postgis 依赖),容器启动时自动在指定数据库中启用扩展。postgres:<version>-alpine 镜像构建,减小镜像体积(约 200-300MB)。amd64/arm64 架构镜像,适配 x86 服务器与 ARM 开发设备(如 M1/M2 Mac)。从 Docker Hub 拉取指定版本镜像(推荐指定版本标签以确保稳定性):
bash# 格式:docker pull <镜像名>:<postgres版本>-pgrouting-<pgrouting版本> docker pull postgres-pgrouting:16-pgrouting-3.5
启动一个单节点容器,默认启用 pgRouting 扩展:
bashdocker run -d \ --name pgroute-demo \ -p 5432:5432 \ -e POSTGRES_PASSWORD=mysecretpassword \ -e POSTGRES_DB=gisdb \ postgres-pgrouting:16-pgrouting-3.5
通过挂载数据卷实现 PostgreSQL 数据持久化(推荐生产环境使用):
bash# 创建本地数据目录 mkdir -p /data/pgroute # 运行容器并挂载数据卷 docker run -d \ --name pgroute-prod \ -p 5432:5432 \ -e POSTGRES_PASSWORD=securepass \ -v /data/pgroute:/var/lib/postgresql/data \ postgres-pgrouting:16-pgrouting-3.5
支持通过环境变量自定义数据库初始化参数,常用变量如下:
| 环境变量 | 说明 | 默认值 |
|---|---|---|
POSTGRES_USER | 数据库管理员用户名 | postgres |
POSTGRES_PASSWORD | 管理员密码(必填,否则容器启动失败) | 无 |
POSTGRES_DB | 初始数据库名称 | postgres |
PGROUTING_EXTENSIONS | 自动启用的 pgRouting 扩展列表(逗号分隔) | pgrouting,postgis |
POSTGRES_INITDB_ARGS | 初始化数据库时的额外参数(如编码) | --encoding=UTF8 |
示例:指定自定义用户、数据库及扩展:
bashdocker run -d \ -e POSTGRES_USER=gisadmin \ -e POSTGRES_PASSWORD=gis@2024 \ -e POSTGRES_DB=city_routing \ -e PGROUTING_EXTENSIONS="pgrouting,postgis,postgis_topology" \ postgres-pgrouting:16-pgrouting-3.5
如需修改 PostgreSQL 或 pgRouting 配置(如内存参数、连接池),可通过挂载配置文件覆盖默认配置:
bash# 准备自定义 postgresql.conf(从容器中复制默认配置修改) docker cp pgroute-demo:/var/lib/postgresql/data/postgresql.conf ./my-postgres.conf # 挂载自定义配置文件运行 docker run -d \ --name pgroute-custom \ -v ./my-postgres.conf:/var/lib/postgresql/data/postgresql.conf \ -v /data/pgroute:/var/lib/postgresql/data \ postgres-pgrouting:16-pgrouting-3.5
使用 docker-compose.yml 简化多服务集成(如搭配 GIS 应用后端):
yamlversion: '3.8' services: pgroute: image: postgres-pgrouting:16-pgrouting-3.5 container_name: pgroute-service restart: always environment: POSTGRES_USER: gisuser POSTGRES_PASSWORD: gis@pass123 POSTGRES_DB: routing_db PGROUTING_EXTENSIONS: "pgrouting,postgis,postgis_raster" ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data - ./init-scripts:/docker-entrypoint-initdb.d # 挂载初始化 SQL 脚本 networks: - gis-network networks: gis-network: driver: bridge volumes: pgdata: # 命名卷自动管理数据持久化
启动服务:docker-compose up -d
容器启动后,可通过 psql 客户端验证 pgRouting 是否正常加载:
bash# 进入容器 docker exec -it pgroute-demo psql -U postgres -d gisdb # 在 psql 终端执行 gisdb=# SELECT pgr_version(); pgr_version ---------------------------------------- (3.5.0,1.7.0,3.5.0,bfd9c8c,master,1.7.0) (1 row)
若返回版本信息,说明 pgRouting 已成功集成。
14-pgrouting-* 标签)。/var/lib/postgresql/data 目录数据,避免容器删除导致数据丢失。postgresql.conf 调整 shared_buffers、work_mem 等参数优化性能。pg_upgrade)。

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务