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
相关产品推荐
相关产品推荐

