Docker部署Open Trip Planner 2遇otp命令路径错误求助
解决OTP2 Docker部署的"otp: executable file not found"错误
问题根源
这个错误的核心是容器内找不到otp可执行命令,大概率是以下原因导致:
- 自定义的
otp入口脚本未添加可执行权限 - 脚本所在路径未加入容器的
$PATH环境变量 - Dockerfile中未正确配置脚本的复制与权限
针对性修复步骤
1. 给入口脚本加权限并放置到正确路径
先在本地给你的otp脚本添加可执行权限:
chmod +x otp
然后修改Dockerfile,将脚本复制到系统默认的PATH目录,并确保权限生效:
COPY otp /usr/local/bin/ RUN chmod +x /usr/local/bin/otp
/usr/local/bin是容器默认$PATH包含的目录,这样启动时就能直接找到otp命令。
2. 修正Dockerfile的启动配置
Dockerfile末尾直接将otp脚本设为入口:
ENTRYPOINT ["otp"]
如果需要默认参数,可追加一行:
CMD ["--help"]
3. 调整docker-compose.yml的命令参数
Compose文件中的command字段只需传递otp脚本的运行参数,示例:
services: otp: build: . command: ["--build", "/data", "--port", "8080"] volumes: - ./your-local-data:/data
更简便的OTP2运行方案
无需自定义脚本,直接用Java命令调用OTP2的JAR包,步骤更直观:
简化版Dockerfile
FROM eclipse-temurin:17-jre WORKDIR /app # 复制本地的OTP2 shaded JAR包,也可替换为下载命令 COPY otp-2.4.0-shaded.jar ./otp.jar # 直接以Java命令作为容器入口 ENTRYPOINT ["java", "-jar", "/app/otp.jar"]
构建路网图用的docker-compose.yml
services: otp-build: build: . command: ["--build", "/data", "--save", "/data/graph"] volumes: - ./gtfs-data:/data - ./graph-output:/data/graph
启动服务用的docker-compose.yml
services: otp-server: build: . command: ["--load", "/data/graph", "--port", "8080"] ports: - "8080:8080" volumes: - ./graph-output:/data/graph
两个Compose文件共用同一个镜像,分别传递构建和运行的参数,彻底避开自定义脚本的路径问题。
内容的提问来源于stack exchange,提问作者Tristan T.
相关产品推荐
相关产品推荐

