Play Framework 2.4 docker 图片 运行 错误

Play Framework 2.4 docker image run error

我已经为我的应用程序设置了一个 docker 图片。目标平台是 debian jessie。 图像构建无误。当我尝试 运行 时出现问题。我这样做:

    sudo docker run appname -Dconfig.file=/tmp/application.conf -Dapplication.home=/root/targer/universal/stage

,提供外部配置文件和 application.home 环境变量

麻烦的是,使用自定义绑定的 DI classes 有问题,即我将这一行放在 application.conf:

    play.modules.enabled += "me.example.inject.SetupInjectors"

在扩展 AbstractModule 的 class 中,我将我的实现绑定为:

    bind(Interface.class).to(InterfaceImplementation.class);

错误是

    Oops, cannot start the server. com.google.inject.ProvisionException: Unable to provision, see the following errors:

  1) No implementation for core.notification.email.MailTemplateService was bound.
  while locating core.notification.email.MailTemplateService
    for parameter 2 at core.services.impl.user.service.UserServiceImpl.<init>(UserServiceImpl.java:55)
  while locating core.services.impl.user.service.UserService
    for field at controllers.Application.userService(Application.java:34)
  while locating controllers.Application
    for parameter 1 at router.Routes.<init>(Routes.scala:108)
  while locating router.Routes
  while locating play.api.inject.RoutesProvider
  while locating play.api.routing.Router

它对所有自定义绑定组件重复了 46 次相同的错误。不用说,activator 运行 就像一个魅力。看起来是这样,我的 play.modules.enabled 设置在启动期间被忽略了

此外,值得一提的是,我对其他 Play 项目有一个库依赖,它被打包为一个库并存储在 sonatype nexus 服务器上。

问题很简单。我已经从主机 FS 传递了 -Dconfig.file,这是荒谬的。所以,我将启动脚本更改为

sudo docker run -v /home/myapp/conf:/conf myapp-Dconfig.file=/conf/application.conf -Dapplication.home="/root/target/universal/stage"

将我的本地路径映射到图像的 fs。 Play Framework 使用了类路径中的 application.conf(它就在那里,因为我对另一个 Play! 项目有库依赖性。