我为我的应用设置了泊坞窗图片。目标平台是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服务器上。
答案 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!项目有一个库依赖。