
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
一个Docker Compose项目,用于搭建OSM PostGIS数据库并通过定期自动更新获取OSM数据。仅需准备PBF文件、geojson文件(如需限制数据范围),即可运行该项目。
!架构图
以下是使用默认配置快速搭建Docker-OSM的示例:
settings文件夹并命名为country.pbf或者执行settings_downloader.sh脚本下载PBF和裁剪文件:
bash./settings_downloader.sh GEOJSON_URL 大洲 国家 代码 ./settings_downloader.sh https://github.com/kartoza/docker-osm/raw/develop/settings/clip.geojson africa south-africa
允许的文件名列表可查看countries.json文件。
也可使用Python脚本pbf_downloader.py下载。
docker-compose.yml中取消以下配置块的注释:yml# 取消注释以从Docker网络外部访问PostGIS数据库 ports: - "35432:5432"
make run,这将下载并运行docker-osm项目。根据网络带宽和PBF文件大小,此过程可能需要较长时间。localhost,数据库gis,端口35432,用户名和密码均为docker。如需进一步定制,请阅读以下内容。
Dockerfile在Docker Cloud kartoza/docker-osm上执行。
bashdocker pull kartoza/docker-osm:imposm-latest docker pull kartoza/docker-osm:osmupdate-latest
可使用提供的docker-compose项目并引用互联网上的镜像,便于将Docker-OSM集成到现有docker-compose项目中。
以下示例将搭建南非OSM数据库,每2分钟更新一次。
在osm_downloader容器的环境变量中指定区域PBF文件。可从以下URL下载PBF文件:
settings文件夹中只能放置一个PBF文件,仅读取最后一个文件。
在settings文件夹中,可编辑mapping.yml自定义PostGIS schema。有关映射配置文档,请参见Imposm网站:[***]
注意:Imposm设计用于空间分析,而非OSM贡献分析。如需该功能,需使用支持OSM元数据的其他数据库schema。可查看OSM Wiki中的"Lossless" schemas。
可在docker-compose文件中配置更新时间间隔,默认2分钟。若将TIME变量设为0,则不导入差异文件。
默认更新流为全球范围。因此,即使导入了本地PBF文件,若未设置裁剪区域,最终会包含全球数据。
初始导入或更新后,Imposm使用-limito标志,允许定义更小的工作区域。限制导入数据库的要素比后期裁剪更可取。
注意:确保在settings文件夹中添加覆盖目标区域的geojson文件。该geojson可以是国家行政区域范围,也可以是更小的范围。geojson的CRS必须为EPSG:4326。
注意:建议简化clip.geojson的几何形状,简化的几何在导入过程中更易处理。最好使用目标区域的最小边界框。
数据库提供一些默认样式,在QGIS中加载时会自动应用,遵循ImpOSM的默认OSM映射。
bashmake import_styles # 导入样式 make remove_styles # 移除样式 make backup_styles # 备份样式
可将PostGIS函数、触发器、物化视图添加到名为post-pbf-import.sql的SQL文件中,该文件将自动导入数据库。
构建运行应用所需的Docker镜像:
bashdocker-compose build docker-compose up
生产环境中,应在启动时后台运行服务:
bashdocker-compose up -d
可通过读取settings/timestamp.txt文件或执行以下命令查看数据库时间戳:
bashmake timestamp
Makefile中可切换到包含QGIS Server的另一个docker-compose项目。运行后,在主机(非Docker内)打开index.html文件,可看到OSM和QGIS Server显示PostGIS表,网页使用Leaflet。
若需调整QGIS项目,需在/etc/hosts中添加主机:
127.0.0.1 db
因为在docker-compose文件中,PostGIS数据库通过别名db进行链接。
!https://raw.githubusercontent.com/kartoza/docker-osm/develop/docs/docker-compose.png
此Docker镜像运行时,会定期(根据更新间隔)获取全球范围内的新差异文件。
也可指定自定义URL获取差异文件,以检索区域差异而非全球差异。
可指定多边形区域,使差异仅应用该区域内的要素。例如,提供马拉维边界多边形,将仅从差异中提取马拉维要素。
注意:此处获取的差异及指定的选项与初始底图无关。例如,若初始底图为马拉维,而指定博茨瓦纳的差异区域,则博茨瓦纳的更新要素将应用于仅包含马拉维要素的底图。因此,需确保差异区域与原始底图覆盖区域一致。
差异文件下载后放入/home/import_queue,由长期运行的imposm3容器拾取并应用到数据库。
应包含3个文件夹:osm_pbf、import_queue、import_done。
在base-pbf中放置状态文件,例如:[***]
bashdocker build -t osmupdate . docker run -v $(pwd)/import-queue/:/home/import-queue -v $(pwd)/base-pbf/:/home/base-pbf -v $(pwd)/import-done/:/home/import-done -d osmupdate
可通过-e添加设置:
bash- MAX_DAYS=100:组装累积变更文件的最大时间范围 - DIFF=sporadic:osmupdate使用分钟、小时和日变更文件的组合,可选值:minute、hour、day、sporadic - MAX_MERGE=7:并行处理变更文件的最大数量 - COMPRESSION_LEVEL=1:gzip压缩级别,1(低压缩快)到9(高压缩慢) - BASE_URL=http://planet.openstreetmap.org/replication/:自定义区域更新文件URL - IMPORT_QUEUE=import_queue:导入队列文件夹 - IMPORT_DONE=import_done:已导入文件夹 - OSM_PBF=osm_pbf:OSM文件文件夹 - TIME=120:脚本两次执行间隔(秒)
使用docker-compose时,可在docker-compose.yml中配置这些设置。
此镜像负责将选定区域(如全球或马拉维等国家)的初始数据加载到数据库,然后按固定间隔(默认2分钟)将/home/import_queue文件夹中的差异应用到PostGIS OSM数据库。差异由单独的容器(见osm_update容器)获取。
容器将在BASE_PBF中查找OSM文件(.pbf)及其状态文件(.state.txt)。
可通过-e添加设置:
bash- TIME=120:脚本两次执行间隔(秒) - POSTGRES_USER=docker:默认用户 - POSTGRES_PASS=docker:默认密码 - POSTGRES_HOST=db:数据库主机 - POSTGRES_PORT=5432:数据库端口 - SETTINGS=settings:设置文件夹(包含*.json和*.sql) - CACHE=cache:缓存文件夹 - BASE_PBF=base_pbf:OSM文件文件夹 - IMPORT_DONE=import_done:已导入差异文件夹 - IMPORT_QUEUE=import_queue:待导入差异文件夹 - SRID=4326:空间参考系,可选3857 - OPTIMIZE=false:优化设置,参见(Imposm)[http://imposm.org/docs/imposm3/latest/tutorial.html#optimize] - DBSCHEMA_PRODUCTION=public:生产表schema,参见(Imposm)[http://imposm.org/docs/imposm3/latest/tutorial.html#deploy-production-tables] - DBSCHEMA_IMPORT=import:导入表schema - DBSCHEMA_BACKUP=backup:备份表schema
可在本仓库提供的docker-compose.yml文件中调整这些参数。
有关docker-postgis的环境变量,请参考https://github.com/kartoza/docker-postgis%E3%80%82
如果需要kartoza提供更实质性的帮助(我们在docker-osm上的工作和互动是无偿的),请考虑签订支持级别协议。
此应用由以下人员设计和实现:
Ariel Nunez (***)提供了重要的设计思路。
本项目部分基于他人的现有工作构建。
2015年7月
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务