首页 > 解决方案 > Dockerize Scala 应用程序:无法找到或加载主类

问题描述

我试图了解如何使用 Docker 编译和运行 scala 应用程序,我遵循了这个示例:https ://github.com/codefresh-contrib/scala-hello-world-app

我的项目看起来像:

├── Dockerfile
├── README.md
├── build.sbt
├── project
│   ├── build.properties
│   └── plugins.sbt
└── src
    └── main
        └── scala
            └── HelloWorld.scala

HelloWorld 很简单:

object HelloWorld {
  def main(args: Array[String]): Unit = {
    println("Hello, world!")
  }
}

build.properties 内容如下:

sbt.version=1.3.8

构建.sbt:

name := "scala-hello-world-sample-app"

version := "1.0"

scalaVersion := "2.12.2"

最后我的 Dockerfile 是:

FROM openjdk:8-jre-alpine3.9 

WORKDIR /HelloWorld

COPY . /HelloWorld

CMD ["java", "-cp", "target/scala-2.12/*.jar:scala-library-2.12.2.jar", "HelloWorld"]

然而我似乎无法让它工作,我执行 Dockerfile 所在的下两个命令:

docker build -t my_image .

docker run my_image产生:

Error: Could not find or load main class HelloWorld

知道我做错了什么吗?

谢谢!

PS:的输出docker build -t my_image .是:

+] Building 2.7s (8/8) FINISHED
 => [internal] load .dockerignore                                                                                                                                                 0.0s
 => => transferring context: 2B                                                                                                                                                   0.0s
 => [internal] load build definition from Dockerfile                                                                                                                              0.0s
 => => transferring dockerfile: 37B                                                                                                                                               0.0s
 => [internal] load metadata for docker.io/library/openjdk:8-jre-alpine3.9                                                                                                        2.6s
 => [1/3] FROM docker.io/library/openjdk:8-jre-alpine3.9@sha256:f362b165b870ef129cbe730f29065ff37399c0aa8bcab3e44b51c302938c9193                                                  0.0s
 => [internal] load build context                                                                                                                                                 0.1s
 => => transferring context: 7.36kB                                                                                                                                               0.1s
 => CACHED [2/3] WORKDIR /HelloWorld                                                                                                                                              0.0s
 => [3/3] COPY . /HelloWorld                                                                                                                                                      0.0s
 => exporting to image                                                                                                                                                            0.0s
 => => exporting layers                                                                                                                                                           0.0s
 => => writing image sha256:f9b47f877daa755c569a34bac4b24d6f08b55746a5df24d605fe9878ab124822                                                                                      0.0s
 => => naming to docker.io/library/my_image

标签: scaladockerdocker-composedockerfile

解决方案


添加这个plugins.sbt

addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1")

sbt clean compile dist

然后你会在./target/universal 像这样创建 Dockerfile中找到一个 zipFile

FROM openjdk:8
COPY ./ /opt
WORKDIR /opt
ENTRYPOINT ["./bin/your-app"]

你去吧


推荐阅读