Play Framework 2.4 docker image运行错误

时间:2015-09-18 14:46:29

标签: java dependency-injection guice playframework-2.4

我为我的应用设置了泊坞窗图片。目标平台是debian jessie。 图像构建没有错误。当我尝试运行它时发生故障。我是这样做的:

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

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

麻烦的是,使用自定义绑定的DI类出了问题,即我把这行放在application.conf中:

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

在这个扩展AbstractModule的类中,我绑定了我的实现,如:

    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次重复所有自定义绑定组件的相同错误。毋庸置疑,激活者的运行就像一个魅力。看来是这样,我的play.modules.enabled设置在启动时被忽略了

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

1 个答案:

答案 0 :(得分:2)

问题很简单。我从主机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使用了classpath中的application.conf(它就在那里,因为我对另一个Play!项目有一个库依赖。