java.lang.RuntimeException:未检测到主类-Docker

时间:2019-05-06 17:18:26

标签: scala docker sbt

在尝试对应用程序进行docker化时,我遇到了一个非常奇怪的问题。这是一个简单的Scala应用,以Kafka主题编写。 更具体地说,我有一个Dockerfile,在其下面安装sbt并将我的应用程序复制到一个容器中。 任何建议都值得欢迎! :) 您是否有使用dockerized sbt应用程序的适当示例?

运行docker-compose up时出现此错误

collector_1   | [error] java.lang.RuntimeException: No main class detected.
collector_1   | [error]     at scala.sys.package$.error(package.scala:26)
collector_1   | [error] (Compile / bgRun) No main class detected.
collector_1   | [error] Total time: 22 s, completed May 6, 2019, 5:15:20 PM

Dockerfile

FROM openjdk:11.0.2

# Env variables
ENV SCALA_VERSION 2.12.8
ENV SBT_VERSION 1.2.8

# Install Scala
## Piping curl directly in tar
RUN \
  curl -fsL https://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz | tar xfz - -C /root/ && \
  echo >> /root/.bashrc && \
  echo "export PATH=~/scala-$SCALA_VERSION/bin:$PATH" >> /root/.bashrc

# Install sbt
RUN \
  curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
  dpkg -i sbt-$SBT_VERSION.deb && \
  rm sbt-$SBT_VERSION.deb && \
  apt-get update && \
  apt-get install sbt && \
  sbt sbtVersion && \
  mkdir project && \
  echo "scalaVersion := \"${SCALA_VERSION}\"" > build.sbt && \
  echo "sbt.version=${SBT_VERSION}" > project/build.properties && \
  echo "case object Temp" > Temp.scala && \
  sbt compile && \
  rm -r project && rm build.sbt && rm Temp.scala && rm -r target

# Define working directory

WORKDIR /collector

ADD ./ /collector

CMD sbt run

我的build.sbt文件是这样的:

name := "collector"

version := "0.1"

scalaVersion := "2.12.8"

lazy val akkaVersion = "2.5.22"
lazy val akkaHttpVersion = "10.1.8"
lazy val configVersion = "1.3.4"
lazy val kafkaClientVersion = "2.2.0"
lazy val argonautVersion = "6.2.3"

lazy val root = (project in file(".")).enablePlugins(JavaAppPackaging)

libraryDependencies ++= {

  Seq(

    "com.typesafe" % "config" % configVersion,
    "com.typesafe.akka" %% "akka-http" % akkaHttpVersion,
    "com.typesafe.akka" %% "akka-stream" % akkaVersion,
    "com.typesafe.akka" %% "akka-actor" % akkaVersion,
    "org.apache.kafka" % "kafka-clients" % kafkaClientVersion,
    "io.argonaut" %% "argonaut" % argonautVersion,
    "io.argonaut" %% "argonaut-cats" % argonautVersion
  )
}
mainClass in(Compile, run) := Some("com.mtp.WebSocketClientFlow")
mainClass in (Compile, packageBin) := Some("com.mtp.WebSocketClientFlow")
mainClass in Universal := Some("com.mtp.WebSocketClientFlow")

enablePlugins(DockerSpotifyClientPlugin)
enablePlugins(DockerPlugin)

1 个答案:

答案 0 :(得分:-1)

因为您不在正确的工作目录中。删除 CMD sbt run 和 ls /collector 以确保您在正确的位置。因为我遇到了这样的问题,而且我错了地方。

相关问题