Problems building public transport graph (GTFS)

Hi everyone,

I’m currently trying to set up OpenRouteService (ORS) with public transport routing using Docker.
The OSM import works fine, but ORS fails when building the transit graph from GTFS data.
I have already tried multiple GTFS datasets.

However, the initialization still fails with the following error: java.util.concurrent.ExecutionException: java.lang.RuntimeException: Error while constructing transit network. Is your GTFS file valid? Please check log for possible causes.

docker-compose.yml

ors:
    container_name: ors
    image: openrouteservice/openrouteservice:v9.5.0
    user: 0:0
    volumes:
      - ./var/lib/ors-9.5/:/home/ors
    environment:
      BUILD_GRAPHS: True
      CONTAINER_LOG_LEVEL: DEBUG
      XMS: 1g
      XMX: 6g 
      ADDITIONAL_JAVA_OPTS: ""

ors-config.yml

ors:
  engine:
    profile_default:
      elevation: false
      build:
        source_file: /home/ors/files/osm_file.pbf
    profiles:
      cycling-regular:
        enabled: true
      driving-car:
        enabled: true
      foot-walking:
        enabled: true
      public-transport:
        enabled: true
logging:
  file:
    name: ./logs/ors.log
  pattern:
    console: "%d{yyyy-MM-dd HH:mm:ss} %highlight{%-7p} %style{%50t}{Cyan} %style{[ %-40.40c{1.} ]}{Bright Cyan}   %m%n"
    file: "%d{yyyy-MM-dd HH:mm:ss} %p [%-40.40c{1.}] - %m%n"
  level:
    root: DEBUG
    org.heigit: DEBUG
    com.graphhopper: DEBUG
    com.graphhopper.gtfs: DEBUG
  endpoints:
    isochrones:
     enabled: true
     attribution: openrouteservice.org, OpenStreetMap contributors
     maximum_locations: 2
     maximum_intervals: 10
     allow_compute_area: true
     maximum_range_distance_default: 50000
     maximum_range_distance:
       - profiles: driving-car, driving-hgv
         value: 500000
     maximum_range_time_default: 18000
     maximum_range_time:
       - profiles: driving-car, driving-hgv
         value: 3600
     fastisochrones:
       maximum_range_distance_default: 50000
       maximum_range_distance:
         - profiles: driving-car, driving-hgv
           value: 500000
       maximum_range_time_default: 18000
       maximum_range_time:
         - profiles: driving-car, driving-hgv
           value: 10800
    profiles:
      public-transport:
        encoder_name: public-transport
        build:
          encoder_options:
            block_fords: false
            enable_custom_models: false
          elevation: true
          gtfs_file: /home/ors/files/google_transit.zip
        service:
          maximum_visited_nodes: 1000000

ors.log

2025-11-25 12:42:08 DEBUG [o.s.w.s.m.m.a.HttpEntityMethodProcessor ] - Writing ["{"status":"not ready"}"]
2025-11-25 12:42:08 DEBUG [o.s.w.s.DispatcherServlet               ] - Completed 503 SERVICE_UNAVAILABLE
2025-11-25 12:42:12 DEBUG [o.s.w.s.DispatcherServlet               ] - GET "/ors/v2/health", parameters={}
2025-11-25 12:42:12 DEBUG [s.w.s.m.m.a.RequestMappingHandlerMapping] - Mapped to org.heigit.ors.api.controllers.HealthAPI#fetchHealth()
2025-11-25 12:42:12 DEBUG [o.s.w.s.m.m.a.HttpEntityMethodProcessor ] - Found 'Content-Type:application/json' in response
2025-11-25 12:42:12 DEBUG [o.s.w.s.m.m.a.HttpEntityMethodProcessor ] - Writing ["{"status":"not ready"}"]
2025-11-25 12:42:12 DEBUG [o.s.w.s.DispatcherServlet               ] - Completed 503 SERVICE_UNAVAILABLE
2025-11-25 12:42:12 INFO [c.g.r.s.PrepareRoutingSubnetworks       ] - foot_recommended - Found 21562 subnetworks (11100 single edges and 10462 components with more than one edge, total nodes: 7254780), took: 4.113425s
2025-11-25 12:42:12 INFO [c.g.r.s.PrepareRoutingSubnetworks       ] - foot_recommended - Marked 21560 subnetworks (biggest: 396 edges) -> 2 components(s) remain (smallest: 1362, biggest: 7191644 edges), total marked edges: 25337, took: 0.010589264s
2025-11-25 12:42:12 INFO [c.g.r.s.PrepareRoutingSubnetworks       ] - Finished finding and marking subnetworks for 3 jobs, took: 10.697347s, totalMB:6144, usedMB:5489
2025-11-25 12:42:12 INFO [o.h.o.r.g.e.ORSGraphHopper              ] - nodes: 2 789 771, edges: 3 627 390
2025-11-25 12:42:13 INFO [o.h.o.r.g.e.ORSGraphHopper              ] - Bridge interpolation 0s, tunnel interpolation 0s, ferry interpolation 0s
2025-11-25 12:42:15 INFO [c.g.s.i.LocationIndexTree               ] - location index created in 2.0062475s, size:4 551 220, leafs:168 721, precision:500, depth:5, checksum:1951989, entries:[16, 16, 16, 16, 4], entriesPerLeaf:26.974829
2025-11-25 12:42:15 DEBUG [o.s.w.s.DispatcherServlet               ] - GET "/ors/v2/health", parameters={}
2025-11-25 12:42:15 DEBUG [s.w.s.m.m.a.RequestMappingHandlerMapping] - Mapped to org.heigit.ors.api.controllers.HealthAPI#fetchHealth()
2025-11-25 12:42:15 DEBUG [o.s.w.s.m.m.a.HttpEntityMethodProcessor ] - Found 'Content-Type:application/json' in response
2025-11-25 12:42:15 DEBUG [o.s.w.s.m.m.a.HttpEntityMethodProcessor ] - Writing ["{"status":"not ready"}"]
2025-11-25 12:42:15 DEBUG [o.s.w.s.DispatcherServlet               ] - Completed 503 SERVICE_UNAVAILABLE
2025-11-25 12:42:15 DEBUG [o.h.o.r.RoutingProfileManager           ] - java.util.concurrent.ExecutionException: java.lang.RuntimeException: Error while constructing transit network. Is your GTFS file valid? Please check log for possible causes.
2025-11-25 12:42:15 ERROR [o.h.o.r.RoutingProfileManager           ] - 
2025-11-25 12:42:15 ERROR [o.h.o.r.RoutingProfileManager           ] - Exception at RoutingProfileManager initialization: class java.util.concurrent.ExecutionException: java.lang.RuntimeException: Error while constructing transit network. Is your GTFS file valid? Please check log for possible causes.
2025-11-25 12:42:15 ERROR [o.h.o.r.RoutingProfileManager           ] - 
2025-11-25 12:42:15 DEBUG [j.l.Runtime                             ] - Runtime.exit() called with status: 1
java.lang.Throwable: Runtime.exit(1)
	at java.base/java.lang.Shutdown.logRuntimeExit(Shutdown.java:179) ~[?:?]
	at java.base/java.lang.Shutdown.exit(Shutdown.java:160) ~[?:?]
	at java.base/java.lang.Runtime.exit(Runtime.java:188) ~[?:?]
	at java.base/java.lang.System.exit(System.java:1920) ~[?:?]
	at org.heigit.ors.routing.RoutingProfileManager.<init>(RoutingProfileManager.java:41) ~[ors-engine-9.5.0.jar!/:9.5.0]
	at org.heigit.ors.api.servlet.listeners.ORSInitContextListener.lambda$contextInitialized$0(ORSInitContextListener.java:61) ~[!/:9.5.0]
	at java.base/java.lang.Thread.run(Thread.java:1583) [?:?]

Any ideas?

Discussion here is happening in the corresponding issue: