使用Azure容器实例部署Openrouteservice遇到问题
排查Azure容器实例部署Openrouteservice时
docker compose up无响应的问题 核心排查方向与解决方案
1. 验证Docker Context配置
先确认当前是否切换到了目标Azure Context:
docker context ls docker context use <你的Azure Context名称>
如果Context未正确切换,docker compose up会默认在本地执行,自然无云端部署反应。
2. 修复Azure文件共享挂载问题
你修改后的Compose文件中,Azure文件共享的挂载写法存在错误:
# 错误写法:Azure文件卷不能直接在卷名后追加子路径 - mydata/puerto-rico-latest.osm.pbf:/home/ors/ors-core/data/osm_file.pbf
正确做法是:
- 将
puerto-rico-latest.osm.pbf上传到Azure文件共享orscontainersharename的根目录 - 调整挂载规则为卷到容器目录的映射,而非文件级映射:
volumes: - mydata:/home/ors/ors-core/data - mydata:/home/ors/ors-core/logs/ors - mydata:/home/ors/tomcat/logs - mydata:/home/ors/ors-conf
同时确保存储账户orscontainerstorageacc、文件共享orscontainersharename存在,且当前Azure账号拥有存储文件数据参与者权限。
3. 移除冲突的build字段
你的Compose文件同时保留了build和image字段:
image: openrouteservice/openrouteservice:latest build: context: ../ args: ORS_CONFIG: ./openrouteservice/src/main/resources/ors-config-sample.json OSM_FILE: ./openrouteservice/src/main/files/heidelberg.osm.gz
Azure容器实例不支持云端构建镜像,build字段会导致Compose尝试本地构建,与Azure Context冲突引发静默阻塞。需完全删除build块,并指定ACR中的完整镜像地址(例如:orscontainerstorageacc.azurecr.io/openrouteservice/openrouteservice:latest)。
4. 补充资源配置与调整JVM参数
Openrouteservice构建地图需要足够资源,需在Compose中添加资源限制:
services: ors-app: # ... 其他配置 deploy: resources: limits: cpus: '2' memory: 4G reservations: cpus: '1' memory: 2G
同时将JVM堆内存调整到4G以上,避免构建地图时内存不足:
JAVA_OPTS=-Djava.awt.headless=true -server -XX:TargetSurvivorRatio=75 -XX:SurvivorRatio=64 -XX:MaxTenuringThreshold=3 -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:ParallelGCThreads=4 -Xms2g -Xmx4g
5. 启用调试日志定位问题
执行命令时添加调试参数,查看具体执行细节:
docker compose up --debug
若容器已创建但未启动,可查看容器日志:
docker logs ors-app
修改后的完整Compose示例
version: '2.4' services: ors-app: container_name: ors-app ports: - "8080:8080" - "9001:9001" # 替换为你的ACR完整镜像路径 image: orscontainerstorageacc.azurecr.io/openrouteservice/openrouteservice:latest user: "0:0" # 避免UID/GID环境变量在Azure环境中失效 volumes: - mydata:/home/ors/ors-core/data - mydata:/home/ors/ors-core/logs/ors - mydata:/home/ors/tomcat/logs - mydata:/home/ors/ors-conf environment: - BUILD_GRAPHS=True - "JAVA_OPTS=-Djava.awt.headless=true -server -XX:TargetSurvivorRatio=75 -XX:SurvivorRatio=64 -XX:MaxTenuringThreshold=3 -XX:+UseG1GC -XX:+ScavengeBeforeFullGC -XX:ParallelGCThreads=4 -Xms2g -Xmx4g" - "CATALINA_OPTS=-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9001 -Dcom.sun.management.jmxremote.rmi.port=9001 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost" deploy: resources: limits: cpus: '2' memory: 4G reservations: cpus: '1' memory: 2G volumes: mydata: driver: azure_file driver_opts: share_name: orscontainersharename storage_account_name: orscontainerstorageacc
内容的提问来源于stack exchange,提问作者justanotherdeveloper
相关产品推荐
相关产品推荐

