简体   繁体   English

如何dockerize我的播放scala应用程序?

[英]How to dockerize my play scala app?

It is my first time using Docker. 这是我第一次使用Docker。 I installed it right and the daemon service is running, as say it is necessary. 我正确安装它并且守护程序服务正在运行,正如所说它是必要的。 SO, I have a simple web app built with play Framework and scala language. 所以,我有一个简单的Web应用程序,使用play Framework和scala语言构建。 After I run "sbt docker:publishLocal" I got "Built image play-scala-book:1.0-SNAPSHOT" success. 在我运行“sbt docker:publishLocal”后,我得到了“Built image play-scala-book:1.0-SNAPSHOT”的成功。 I export "DOCKER_HOST=tcp://192.168.0.8:2375". 我导出“DOCKER_HOST = tcp://192.168.0.8:2375”。 My built.sbt is >> 我的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)

But when I run "docker run -p 9000:9000 play-scala-book:1.0-SNAPSHOT" I got this error >> 但是,当我运行“docker run -p 9000:9000 play-scala-book:1.0-SNAPSHOT”时,我收到此错误>>

[info] application - Creating Pool for datasource 'default'
[info] p.a.d.DefaultDBApi - Database [default] connected at jdbc:h2:mem:play
[error] o.j.StatementLogger - 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] p.a.d.e.ApplicationEvolutions - 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] p.a.d.e.ApplicationEvolutions - Run with -Dplay.evolutions.db.default.autoApply=true if you want to run them automatically (be careful)
[error] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure.
[error] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret
[error] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure.
[error] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret
[error] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure.
[error] p.a.l.c.CryptoConfigParser - 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] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure.
[error] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret
[error] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure.
[error] p.a.l.c.CryptoConfigParser - To set the application secret, please read http://playframework.com/documentation/latest/ApplicationSecret
[error] p.a.l.c.CryptoConfigParser - The application secret has not been set, and we are in prod mode. Your application is not secure.
[error] p.a.l.c.CryptoConfigParser - 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)

On my conf/application.conf I have this > 在我的conf / application.conf上,我有这个>

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

It appears as though you don't have evolutions set to auto apply the ups. 似乎您没有将演变设置为自动应用ups。 Try adding the line below to your application.conf and retry. 尝试将以下行添加到application.conf并重试。

play.evolutions.db.default.autoApply=true

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM