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

Docker部署Play Framework应用时配置文件路径错误求助

解决Play Framework Scala应用Docker部署时的"Bad root server path"错误

问题概述

使用Docker部署Play 2.8.19 + Scala生产应用,启动容器时抛出核心错误:

Bad root server path: /opt/docker/-Dconfig.resource=/opt/docker/conf/production.conf

注:附带的is_cygwin: not found提示可忽略,核心问题为JVM配置参数被误识别为服务器根路径。

环境信息

  • sbt 1.7.2
  • Play Version 2.8.19
  • Java 1.8.0_362
  • Ubuntu 22.04.2 LTS

错误原因

Play生成的启动脚本会将未被识别的参数默认当作服务器根路径,当前配置直接把JVM参数(-Dconfig.resource=...)放在启动命令后,导致脚本误将其解析为根路径参数,从而触发报错。

解决方案

方式1:构建阶段通过javaOptions注入参数

修改build.sbt,移除dockerEntrypoint中的JVM参数,改用Play原生的javaOptions配置传递:

...
Docker / version := sys.env.getOrElse("BUILD_NUMBER", "0")
Docker / daemonUserUid := None
Docker / daemonUser := "daemon"
dockerExposedPorts := Seq(9000)
dockerBaseImage := "openjdk:8-jre-alpine"
dockerUpdateLatest := true
// 注入JVM配置参数
javaOptions in Universal ++= Seq("-Dconfig.resource=/opt/docker/conf/production.conf")
// 仅指定启动脚本路径,保留默认参数逻辑
dockerEntrypoint := Seq("/opt/docker/bin/play-scala-seed")

重新执行sbt "Docker / publishLocal"构建镜像,启动脚本会自动加载javaOptions中的参数,不会被误解析。

方式2:运行时通过环境变量传递参数

Play启动脚本支持通过JAVA_OPTS环境变量传递JVM参数,步骤如下:

  1. 修改build.sbt,恢复默认启动入口:
dockerEntrypoint := Seq("/opt/docker/bin/play-scala-seed")
  1. 启动容器时注入环境变量:
docker run --rm -p 9000:9000 -e JAVA_OPTS="-Dconfig.resource=/opt/docker/conf/production.conf" playground-api

验证要点

  • 确认容器内/opt/docker/conf/production.conf文件存在,可通过docker exec <容器ID> ls /opt/docker/conf检查
  • 若使用相对路径,因启动脚本位于/opt/docker/bin/,可改为-Dconfig.resource=../conf/production.conf

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:03:34