You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows 11下Docker Desktop部署Valhalla报Too many open files错误求助

在Windows 11 Docker Desktop中部署Valhalla(搭配OSM)解决“Too many open files”错误

问题背景

已完成以下操作:

  • 下载OSM PBF文件,配置好文件夹并设置可写权限
  • 执行Docker启动命令完成数据提取:
docker run -t --name valhalla_server ^
  -e build_elevation=True ^
  -p 8002:8002 ^
  -v C:\DarkDays\map\valhalla\routing-valhalla:/custom_files ^
  ghcr.io/nilsnolde/docker-valhalla/valhalla:latest

数据提取正常完成后,系统提示“Starting valhalla service!”,但随即抛出错误:

Too many open files (src/ipc_listener.cpp:297)
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called recursively
terminate called after throwing an instance of 'std::runtime_error'
  what():  terminate called recursively
/custom_files/elevation_data/S19/S19E178.hgt(open): Too many open files
terminate called recursively

访问http://localhost:8002/无响应。

解决方案

1. 直接在启动命令中设置容器文件句柄限制

修改Docker启动命令,添加--ulimit nofile=65535:65535参数,提升容器允许打开的文件数量上限:

docker run -t --name valhalla_server ^
  --ulimit nofile=65535:65535 ^
  -e build_elevation=True ^
  -p 8002:8002 ^
  -v C:\DarkDays\map\valhalla\routing-valhalla:/custom_files ^
  ghcr.io/nilsnolde/docker-valhalla/valhalla:latest

2. 全局配置Docker Desktop的文件句柄限制

如果需要所有容器都应用该限制,可修改Docker守护进程配置:

  • 打开文件%USERPROFILE%/.docker/daemon.json(若不存在则新建)
  • 添加以下配置内容:
{
  "default-ulimits": {
    "nofile": {
      "Name": "nofile",
      "Hard": 65535,
      "Soft": 65535
    }
  }
}
  • 保存文件后重启Docker Desktop,再重新启动Valhalla容器。

3. 优化高程数据文件数量

Valhalla加载高程数据时会打开大量HGT文件,超出限制可通过以下方式优化:

  • 删除elevation_data目录下不需要的区域HGT文件,仅保留部署所需范围的文件
  • 使用GDAL工具将多个HGT文件合并为单个VRT文件,减少文件句柄占用

4. 验证挂载路径与权限

  • 确认挂载的C:\DarkDays\map\valhalla\routing-valhalla文件夹已授予Docker Desktop完全读写权限
  • 避免路径中包含空格或特殊字符,防止挂载异常导致文件访问问题

内容的提问来源于stack exchange,提问作者Rick Davidson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:23:27