scala - 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
解决方案
添加这个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"]
你去吧
推荐阅读
- android - android.view.View.findViewById(int)' 在空对象引用上
- c# - 线程与并行。为了性能
- dart - 关于 ExpansionPanel 和 SQFlite
- ruby-on-rails - 不在我的角色列表中的用户的密码验证失败
- r - Microsoft ML 服务器/R 客户端包问题
- dart - 尝试在 https://pub.dartlang.org 查找包 cupertino_icons 时遇到套接字错误
- javascript - 无论我做什么,按钮都不会执行 Javascript
- c++ - 从向量不需要的值进行迭代器打印
- c++ - ../main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或目录
- python-2.7 - 元素的 QPainterPath 百分比/t 值