如何dockerize我的玩Scala应用程序?

这是我第一次使用Docker。 我正确地安装了它,并且守护程序服务正在运行,正如所说的那样。 所以,我有一个简单的networking应用程序与玩框架和Scala语言。 运行“sbt docker:publishLocal”之后,我得到了“构build的图像play-scala-book:1.0-SNAPSHOT”的成功。 我导出“DOCKER_HOST = tcp://192.168.0.8:2375”。 我built.sbt是>>

// import NativePackagerKeys._ // setting a maintainer which is used for all packaging types maintainer := "Felipe Oliveira Gutierrez" // exposing the play ports dockerExposedPorts in Docker := Seq(9000, 9443) name := """play-scala-book""" version := "1.0-SNAPSHOT" lazy val root = (project in file(".")).enablePlugins(PlayScala) scalaVersion := "2.11.7" libraryDependencies ++= Seq( jdbc, cache, ws, evolutions, "com.typesafe.play" %% "anorm" % "2.4.0", "commons-codec" % "commons-codec" % "1.6", specs2 % Test ) resolvers += "scalaz-bintray" at "http://dl.bintray.com/scalaz/releases" // enablePlugins(JavaAppPackaging) 

但是当我运行“docker运行-p 9000:9000 play-scala-book:1.0-SNAPSHOT”我得到这个错误>>

 [info] application - Creating Pool for datasource 'default' [info] padDefaultDBApi - Database [default] connected at jdbc:h2:mem:play [error] ojStatementLogger - java.sql.Statement.executeQuery: select id, hash, apply_script, revert_script, state, last_problem from play_evolutions where state like 'applying_%'; throws exception: org.h2.jdbc.JdbcSQLException: Table "PLAY_EVOLUTIONS" not found; SQL statement: select id, hash, apply_script, revert_script, state, last_problem from play_evolutions where state like 'applying_%' [42102-191] org.h2.jdbc.JdbcSQLException: Table "PLAY_EVOLUTIONS" not found; SQL statement: select id, hash, apply_script, revert_script, state, last_problem from play_evolutions where state like 'applying_%' [42102-191] at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) at org.h2.message.DbException.get(DbException.java:179) at org.h2.message.DbException.get(DbException.java:155) at org.h2.command.Parser.readTableOrView(Parser.java:5349) at org.h2.command.Parser.readTableFilter(Parser.java:1245) at org.h2.command.Parser.parseSelectSimpleFromPart(Parser.java:1884) at org.h2.command.Parser.parseSelectSimple(Parser.java:2032) at org.h2.command.Parser.parseSelectSub(Parser.java:1878) at org.h2.command.Parser.parseSelectUnion(Parser.java:1699) at org.h2.command.Parser.parseSelect(Parser.java:1687) [warn] padeApplicationEvolutions - Your production database [default] needs evolutions! # --- Rev:1,Ups - 96578d1 CREATE SEQUENCE book_id_seq; CREATE TABLE book ( id integer NOT NULL DEFAULT nextval('book_id_seq'), label varchar(255), added bigint ); [warn] padeApplicationEvolutions - Run with -Dplay.evolutions.db.default.autoApply=true if you want to run them automatically (be careful) [error] palcCryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. [error] palcCryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret [error] palcCryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. [error] palcCryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret [error] palcCryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. [error] palcCryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret [info] application - ApplicationTimer demo: Starting application at 2016-05-29T15:57:43.182Z. [error] palcCryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. [error] palcCryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret [error] palcCryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. [error] palcCryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret [error] palcCryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure. [error] palcCryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret Oops, cannot start the server. @708n7c3af: Database 'default' needs evolution! at play.api.db.evolutions.ApplicationEvolutions$$anonfun$play$api$db$evolutions$ApplicationEvolutions$$runEvolutions$1.apply$mcV$sp(ApplicationEvolutions.scala:75) at play.api.db.evolutions.ApplicationEvolutions.withLock(ApplicationEvolutions.scala:99) at play.api.db.evolutions.ApplicationEvolutions.play$api$db$evolutions$ApplicationEvolutions$$runEvolutions(ApplicationEvolutions.scala:49) at play.api.db.evolutions.ApplicationEvolutions$$anonfun$start$1.apply(ApplicationEvolutions.scala:42) at play.api.db.evolutions.ApplicationEvolutions$$anonfun$start$1.apply(ApplicationEvolutions.scala:42) at scala.collection.immutable.List.foreach(List.scala:381) at play.api.db.evolutions.ApplicationEvolutions.start(ApplicationEvolutions.scala:42) at play.api.db.evolutions.ApplicationEvolutions.<init>(ApplicationEvolutions.scala:150) at play.api.db.evolutions.ApplicationEvolutionsProvider.get$lzycompute(EvolutionsModule.scala:53) at play.api.db.evolutions.ApplicationEvolutionsProvider.get(EvolutionsModule.scala:53) at play.api.db.evolutions.ApplicationEvolutionsProvider.get(EvolutionsModule.scala:44) at com.google.inject.internal.ProviderInternalFactory.provision(ProviderInternalFactory.java:81) at com.google.inject.internal.BoundProviderFactory.provision(BoundProviderFactory.java:72) at com.google.inject.internal.ProviderInternalFactory.circularGet(ProviderInternalFactory.java:61) at com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:62) at com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1103) at com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) at com.google.inject.internal.SingletonScope$1.get(SingletonScope.java:145) at com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:41) at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:205) at com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:199) at com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1092) at com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:199) at com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:180) at com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:110) at com.google.inject.Guice.createInjector(Guice.java:96) at com.google.inject.Guice.createInjector(Guice.java:84) at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181) at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123) at play.api.inject.guice.GuiceApplicationLoader.load(GuiceApplicationLoader.scala:21) at play.core.server.ProdServerStart$.start(ProdServerStart.scala:47) at play.core.server.ProdServerStart$.main(ProdServerStart.scala:22) at play.core.server.ProdServerStart.main(ProdServerStart.scala) 

在我的conf / application.conf我有这个>

 play.evolutions { # You can disable evolutions for a specific datasource if necessary db.default.enabled = true db.default.autoApply = true } 

看起来好像你没有设置自动应用ups的进化。 尝试添加下面的行到你的application.conf然后重试。

play.evolutions.db.default.autoApply=true