如何通过Docker构建局域网内离线地图瓦片服务的容器化同步方案?
- 内容介绍
- 文章标签
- 相关推荐
本文共计931个文字,预计阅读时间需要4分钟。
使用Docker实现局域网内访问,不需要试图解,不使用数字,不超过100字,直接输出结果:
确保瓦片数据在局域网内统一可用
瓦片本身是静态文件(PNG/JPEG)或结构化容器(MBTiles),同步的关键是让它在所有目标节点上“路径一致、内容一致、时效一致”:
- 推荐使用 MBTiles 格式(单个 SQLite 文件),避免千万级小文件带来的 I/O 和备份难题;全国/省级数据建议 SSD 存储
- 将 MBTiles 文件放在局域网共享目录(如 NFS/Samba)或宿主机固定路径(如
/opt/mapdata/china.mbtiles),所有 Docker 节点挂载同一路径 - 若需版本管理,可用 rsync 定期推送到各节点:
rsync -avz --delete /mapdata/ user@192.168.10.5:/mapdata/ - 禁止直接修改运行中的 MBTiles 文件——更新时先停服务、替换文件、再重启容器
用 Docker 部署轻量瓦片服务并暴露局域网地址
选用开源无授权限制的 maptiler/tileserver-gl 镜像,启动时绑定局域网 IP 或 0.0.0.0,确保其他设备可直连:
- 启动命令示例(映射到宿主机 8091 端口):
docker run -d --name tileserver -p 192.168.10.10:8091:8080 \<br> -v /opt/mapdata:/data maptiler/tileserver-gl:latest
- 关键点:
192.168.10.10是宿主机在局域网的真实 IP,不是 localhost 或 127.0.0.1 - 前端访问地址即为
http://192.168.10.10:8091/data/v3/{z}/{x}/{y}.png,Cesium/Leaflet 可直接配置此 URL - 如需多实例负载,可在不同节点部署相同配置,前端通过 DNS 轮询或 Nginx 反向代理统一入口
实现瓦片数据的局域网增量同步机制
全量同步耗时长,实际运维中更常用“按区域+按级别”的增量更新策略:
- 用
planetiler生成新区域瓦片时,指定--mbtiles-output输出到临时 MBTiles,再用mbutil或sqlite3合并进主文件(注意 tile ID 冲突处理) - 对已部署节点,编写简单 Shell 脚本检测文件修改时间,自动触发 rsync 同步最新 MBTiles,并发送通知给 tileserver 容器重载(部分镜像支持 HTTP reload 接口)
- 若使用 Docker Compose,可将 MBTiles 挂载为命名卷(
osm-tiles),配合docker volume ls和docker cp手动注入更新,适合低频更新场景 - 不建议在容器内运行 rsync 或 curl 下载——应由宿主机或独立同步服务完成,保持容器职责单一
验证与日常维护要点
同步是否真正生效,不能只看容器是否运行,要从终端设备视角验证:
- 在局域网另一台电脑浏览器中打开
http://192.168.10.10:8091,确认能浏览图层列表和预览瓦片 - 用 curl 测试具体瓦片 URL:
curl -I http://192.168.10.10:8091/data/v3/4/2/5.png,返回 200 表示通路正常 - 检查防火墙:Ubuntu 用
ufw status,CentOS 用firewall-cmd --list-ports,确保 8091 端口放行 - 定期清理旧日志和容器:
docker system prune -f,但不要误删用于挂载的 volume
本文共计931个文字,预计阅读时间需要4分钟。
使用Docker实现局域网内访问,不需要试图解,不使用数字,不超过100字,直接输出结果:
确保瓦片数据在局域网内统一可用
瓦片本身是静态文件(PNG/JPEG)或结构化容器(MBTiles),同步的关键是让它在所有目标节点上“路径一致、内容一致、时效一致”:
- 推荐使用 MBTiles 格式(单个 SQLite 文件),避免千万级小文件带来的 I/O 和备份难题;全国/省级数据建议 SSD 存储
- 将 MBTiles 文件放在局域网共享目录(如 NFS/Samba)或宿主机固定路径(如
/opt/mapdata/china.mbtiles),所有 Docker 节点挂载同一路径 - 若需版本管理,可用 rsync 定期推送到各节点:
rsync -avz --delete /mapdata/ user@192.168.10.5:/mapdata/ - 禁止直接修改运行中的 MBTiles 文件——更新时先停服务、替换文件、再重启容器
用 Docker 部署轻量瓦片服务并暴露局域网地址
选用开源无授权限制的 maptiler/tileserver-gl 镜像,启动时绑定局域网 IP 或 0.0.0.0,确保其他设备可直连:
- 启动命令示例(映射到宿主机 8091 端口):
docker run -d --name tileserver -p 192.168.10.10:8091:8080 \<br> -v /opt/mapdata:/data maptiler/tileserver-gl:latest
- 关键点:
192.168.10.10是宿主机在局域网的真实 IP,不是 localhost 或 127.0.0.1 - 前端访问地址即为
http://192.168.10.10:8091/data/v3/{z}/{x}/{y}.png,Cesium/Leaflet 可直接配置此 URL - 如需多实例负载,可在不同节点部署相同配置,前端通过 DNS 轮询或 Nginx 反向代理统一入口
实现瓦片数据的局域网增量同步机制
全量同步耗时长,实际运维中更常用“按区域+按级别”的增量更新策略:
- 用
planetiler生成新区域瓦片时,指定--mbtiles-output输出到临时 MBTiles,再用mbutil或sqlite3合并进主文件(注意 tile ID 冲突处理) - 对已部署节点,编写简单 Shell 脚本检测文件修改时间,自动触发 rsync 同步最新 MBTiles,并发送通知给 tileserver 容器重载(部分镜像支持 HTTP reload 接口)
- 若使用 Docker Compose,可将 MBTiles 挂载为命名卷(
osm-tiles),配合docker volume ls和docker cp手动注入更新,适合低频更新场景 - 不建议在容器内运行 rsync 或 curl 下载——应由宿主机或独立同步服务完成,保持容器职责单一
验证与日常维护要点
同步是否真正生效,不能只看容器是否运行,要从终端设备视角验证:
- 在局域网另一台电脑浏览器中打开
http://192.168.10.10:8091,确认能浏览图层列表和预览瓦片 - 用 curl 测试具体瓦片 URL:
curl -I http://192.168.10.10:8091/data/v3/4/2/5.png,返回 200 表示通路正常 - 检查防火墙:Ubuntu 用
ufw status,CentOS 用firewall-cmd --list-ports,确保 8091 端口放行 - 定期清理旧日志和容器:
docker system prune -f,但不要误删用于挂载的 volume

