一个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网站:https://imposm.org/docs/imposm3/latest/mapping.html%E3%80%82Docker-OSM%E4%B8%AD%E7%9A%84%E9%BB%98%E8%AE%A4%E6%96%87%E4%BB%B6%E6%9D%A5%E8%87%AAhttps://raw.githubusercontent.com/omniscale/imposm3/master/example-mapping.yml%E3%80%82
注意: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月
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
无需登录使用专属域名
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
Harbor Proxy Repository 对接专属域名
Portainer Registries 加速拉取
Nexus3 Docker Proxy 内网缓存
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
docker search 限制
站内搜不到镜像
离线 save/load
插件要用 plugin install
WSL 拉取慢
安全与 digest
新手拉取配置
镜像合规机制
manifest unknown
no matching manifest(架构)
invalid tar header(解压)
TLS 证书失败
DNS 超时
域名连通性排查
410 Gone 排查
402 与流量用尽
401 认证失败
429 限流
D-Bus 凭证提示
413 与超大单层
来自真实用户的反馈,见证轩辕镜像的优质服务