在Docker中部署osrm-backend

server/2024/11/26 8:26:32/

使用 Docker 安装和运行 OSRM-backend 是一个非常方便的方法,因为 Docker 可以提供一致的环境,避免了许多依赖性和配置问题。以下是如何使用 Docker 安装和运行 OSRM-backend 的步骤:

1. 安装 Docker

确保系统上已经安装了 Docker。如果没有安装,可以使用以下命令安装 Docker:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io

2. 启动 Docker 服务

sudo systemctl start docker

3. 设置 Docker 开机自启

sudo systemctl enable docker

3.1配置 Docker 使用国内镜像加速器

编辑 Docker 配置文件 /etc/docker/daemon.json,添加加速器地址(以阿里云为例):

sudo nano /etc/docker/daemon.json

添加以下内容(将 YOUR_MIRROR_URL 替换为你要获取的加速器地址):

{"registry-mirrors": ["https://YOUR_MIRROR_URL"]
}

保存并退出编辑器,然后重启 Docker 服务:

sudo systemctl daemon-reload
sudo systemctl restart docker

4. 拉取 OSRM-backend 镜像

sudo docker pull osrm/osrm-backend

5. 启动 OSRM 服务

处理完地图数据后,启动 OSRM 服务:

sudo docker run --rm -t -d --name fot-osrm -v /data/fot/map/europe:/data -p 5000:5000 osrm/osrm-backend osrm-routed --algorithm mld /data/switzerland-latest.osrm

6. 下载地图数据

例如:下载瑞士地图数据文件 switzerland-latest.osm.pbf:

wget http://download.geofabrik.de/europe/switzerland-latest.osm.pbf

7. 创建数据目录并移动地图数据

创建数据目录并将地图数据移动到该目录:

sudo mkdir -p /data/fot/map/europe
sudo mv switzerland-latest.osm.pbf /data/fot/map/europe/

8. 处理地图数据

使用 Docker 容器来处理地图数据:

sudo docker run --rm -v /data/fot/map/europe:/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/switzerland-latest.osm.pbf
sudo docker run --rm -v /data/fot/map/europe:/data osrm/osrm-backend osrm-partition /data/switzerland-latest.osrm
sudo docker run --rm -v /data/fot/map/europe:/data osrm/osrm-backend osrm-customize /data/switzerland-latest.osrm

9. 测试服务

您可以使用 curl 命令来测试 OSRM 服务是否正常运行:

curl "http://localhost:5000/route/v1/driving/7.4474,46.9481;7.4355,46.9512?overview=false&steps=true"

10.完整的脚本

为了方便,可以将上述步骤整合成一个脚本:

#!/bin/bash# 安装 Docker
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io# 启动 Docker 服务
sudo systemctl start docker
sudo systemctl enable docker# 配置 Docker 使用国内镜像加速器
sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{"registry-mirrors": ["https://YOUR_MIRROR_URL"]
}
EOF# 重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker# 拉取 OSRM-backend 镜像
sudo docker pull osrm/osrm-backend# 下载地图数据
wget http://download.geofabrik.de/europe/switzerland-latest.osm.pbf# 创建数据目录并移动地图数据
sudo mkdir -p /data/fot/map/europe
sudo mv switzerland-latest.osm.pbf /data/fot/map/europe/# 处理地图数据
sudo docker run --rm -v /data/fot/map/europe:/data osrm/osrm-backend osrm-extract -p /opt/car.lua /data/switzerland-latest.osm.pbf
sudo docker run --rm -v /data/fot/map/europe:/data osrm/osrm-backend osrm-partition /data/switzerland-latest.osrm
sudo docker run --rm -v /data/fot/map/europe:/data osrm/osrm-backend osrm-customize /data/switzerland-latest.osrm# 启动 OSRM 服务
sudo docker run --rm -t -d --name fot-osrm -v /data/fot/map/europe:/data -p 5000:5000
osrm/osrm-backend osrm-routed --algorithm mld /data/switzerland-latest.osrm

将上述脚本保存为 install_osrm.sh,然后执行:

chmod +x install_osrm.sh
./install_osrm.sh

处理地图数据失败处理

当处理单个地区文件比较大时,如处理的italy约1.9G,在执行osrm-extract 遇到了 std::bad_alloc 错误时总是失败,报错

[root@123 europe]# sudo docker run --rm -v /data/fot/map/europe:/data --memory=4g osrm/osrm-backend osrm-extract -p /opt/car.lua /data/italy-latest.osm.pbf --threads=1
[info] Parsed 0 location-dependent features with 0 GeoJSON polygons
[info] Using script /opt/car.lua
[info] Input file: italy-latest.osm.pbf
[info] Profile: car.lua
[info] Threads: 1
[info] Parsing in progress..
[info] input file generated by osmium/1.14.0
[info] timestamp: 2024-11-11T21:21:10Z
[info] Using profile api version 4
[info] Found 3 turn restriction tags:
[info]   motorcar
[info]   motor_vehicle
[info]   vehicle
[info] Parse relations ...
[info] Parse ways and nodes ...
TBB Warning: Exact exception propagation is requested by application but the linked library is built without support for it
terminate called after throwing an instance of 'tbb::captured_exception'what():  std::bad_alloc

这是由于在处理大型 OSM 数据文件时,内存需求超过了系统的实际可用内存。
进一步的解决方案

  1. 增加系统内存:
    如果可能的话,增加系统的物理内存。这对于处理大型 OSM 数据文件非常重要。
  2. 使用更大的交换空间:
    尝试增加交换空间的大小,例如增加到 8GB 或更大。
  3. 减少线程数:
    尽管您已经将线程数设置为 1,但可以尝试进一步减少其他进程的内存使用,确保 osrm-extract 有尽可能多的内存可用。
  4. 分区域处理:
    如果数据文件非常大,可以考虑将数据文件分割成多个较小的区域分别处理。例如,您可以下载意大利不同地区的 OSM 数据文件,然后分别处理每个区域。

方式一、增加交换空间

  1. 停用当前交换空间:
    sudo swapoff -a
  2. 删除旧的交换文件:
    sudo rm /swapfile
  3. 创建新的交换文件:
    sudo fallocate -l 8G /swapfile
    4.设置交换文件的权限:
    sudo chmod 600 /swapfile
    5.设置交换文件:
    sudo mkswap /swapfile
    6.启用交换文件:
    sudo swapon /swapfile
    7.检查交换文件是否已启用:
    sudo swapon --show
    8.执行命令
    sudo docker run --rm -v /data/fot/map/europe:/data --memory=4g osrm/osrm-backend osrm-extract -p /opt/car.lua /data/italy-latest.osm.pbf --threads=1

方式二、分区域处理

  1. 下载意大利不同地区的 OSM 数据文件:
    从 Geofabrik 下载意大利不同地区的 OSM 数据文件,例如 Lombardy、Sicily 等。
  2. 分别处理每个区域:
    sudo docker run --rm -v /data/fot/map/europe:/data --memory=4g osrm/osrm-backend osrm-extract -p /opt/car.lua /data/lombardy-latest.osm.pbf --threads=1
    sudo docker run --rm -v /data/fot/map/europe:/data --memory=4g osrm/osrm-backend osrm-extract -p /opt/car.lua /data/sicily-latest.osm.pbf --threads=1

http://www.ppmy.cn/server/145008.html

相关文章

以思维链为线索推理隐含情感

❀ 以思维链为线索推理隐含情感 简介摘要引言THORTHOR核心代码实验结果代码运行总结 简介 本文主要对2023ACL论文《Reasoning Implicit Sentiment with Chain-of-Thought Prompting》主要内容进行介绍。 摘要 尽管情绪分析任务常依据文本中的直接意见表达来判定目标的情绪倾向…

vulnhub靶场之breakout

empire靶场2 前言 靶机&#xff1a;breakout 攻击&#xff1a;kali 续接上个靶场empire1的继续学习 主机发现 使用arp-scan扫描或者直接查看虚拟机的ip地址 信息收集 使用nmap扫描 端口80apache 2.4.51开启smb服务的两个端口139、445&#xff0c;版本4.6.2两个http服务采…

day23|leetCode 39. 组合总和 , 40.组合总和II , 131.分割回文串

5.组合总和 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target &#xff0c;找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 &#xff0c;并以列表形式返回。你可以按 任意顺序 返回这些组合。 candidates 中的 同一个 数字可以 无限制重复被…

跨平台应用开发框架(1)----Qt(组件篇)

目录 1.Qt 1.Qt 的主要特点 2.Qt的使用场景 3.Qt的版本 2.QtSDK 1.Qt SDK 的组成部分 2.安装 Qt SDK 3.Qt SDK 的优势 3.Qt初识 1.快速上手 widget.cpp mian.cpp widget.h Helloworld.pro 2.对象树 3.坐标系 4.信号和槽 1. 信号和槽的基本概念 2. 信号和槽的…

微服务系统架构图

微服务架构是一种将单一应用程序开发为一组小型服务的架构风格。每个服务都在自己的进程中运行&#xff0c;它们之间采用轻量级的通信机制&#xff08;如 HTTP/REST 或消息队列&#xff09;进行相互协作。以下是关于微服务系统架构的简要介绍&#xff1a;一、核心特点独立部署 …

springboot欢迪迈手机商城设计与开发论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本欢迪迈手机商城就是在这样的大环境下诞生&#xff0c;其可以帮助管理者在短时间内处理完毕庞大的数据信息&…

DataGrip 连接 Redis、TongRDS

连接 Redis 或 TongRDS 有些旧版本 没有 redis 驱动用不了 1&#xff09;选择驱动 2&#xff09;添加连接信息 3&#xff09;测试连接 4&#xff09;保存连接 5&#xff09;使用案例

如何在 Eclipse 中调试ABAP程序

原文链接&#xff1a;Debugging an ABAP Program ADT 中的调试器是一个重要的诊断工具&#xff0c;可用于分析 ABAP 应用程序。 使用调试器&#xff0c;您可以通过在运行时 Debug 单步执行&#xff08;F5&#xff09;程序来确定程序无法正常工作的原因。这使您可以看到正在执…