gpt4 book ai didi

scala - Sbt run命令在Docker容器上失败并显示 “NoSuchFileException”

转载 作者:行者123 更新时间:2023-12-02 20:45:47 29 4
gpt4 key购买 nike

我有一个Play应用程序(使用Scala构建),试图在Docker容器上运行。

以下是我用来启动容器以运行sbt命令的docker-compose.yml和build.sbt的部分。

↓docker-compose.yml

version: '3.7'
services:
service-name:
entrypoint: >
sh -c 'cd /root/project_dir && sbt service/run'
volumes:
- ./project:/root/project_dir/project
- ./service_src:/root/project_dir/service_src
- ./build.sbt:/root/project_dir/build.sbt
- ./.ivy2/:/root/.ivy2/
- ./.sbt/:/root/.sbt/

↓build.sbt
lazy val service = project
.in(file("./service_src"))
:
)

当我使用此设置启动容器时,由于某种原因,我最终遇到以下错误
[error] java.nio.file.NoSuchFileException: /root/.ivy2/cache/org.webjars.npm/wrappy/jars/wrappy-1.0.2.jar
实际上存在于缓存中。

我应该在哪里寻找可能导致这种情况的原因?

更新:

通过观察,我发现在容器中装入Windows主机目录似乎是造成此问题的原因。

通过挂载而不是挂载,通过 docker copy复制文件/目录消除了该错误...

如何使用卷实现相同的目标,或者这是无法完成的事情?

最佳答案

您无需复制.sbt.ivy2目录。
我建议使用sbt native packager,以便为您创建图像,而不是重新发明轮子:
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.18")添加到名为project/plugins.sbt的文件中。
然后在build.sbt中将.enablePlugins(JavaAppPackaging, DockerPlugin)添加到您的项目中:

lazy val service = project
.in(file("./service_src"))
:
).enablePlugins(JavaAppPackaging, DockerPlugin)

您可以使用sbt配置更改图像设置:

dockerExposedPorts := Seq(9000)
dockerBaseImage := "openjdk:8-jre"
version in Docker := "1.0.0"

为了在您的计算机上构建镜像,请运行 sbt docker:publishLocal
您可以通过运行 sbt docker:stage来查看创建的docker镜像。

请参阅 the documentation以获取更多帮助,或在此处询问。
如果要使用Alpine(轻量级Linux发行版)运行应用程序,请参见 Alpine section

关于scala - Sbt run命令在Docker容器上失败并显示 “NoSuchFileException”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54760631/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com