使用 sbt native-packager 在 docker 容器上运行代码时获取 fileNotFoundException

问题描述

我正在使用 sbt native-packager 创建我的 akka http 项目的 docker 镜像 这是我的 build.sbt 文件

name := "myproject-auth"

version := "0.0.1"

enablePlugins(DockerPlugin)

enablePlugins(JavaAppPackaging)

dockerExposedPorts := Seq(8083)

然后我将我的应用程序图片创建为

sbt docker:publishLocal

它创建了我的项目图像并且运行良好,问题是 在我的代码中,我正在读取一个src/main/resources/json1.json

读取的 json 文件
val jsonString = os.read(os.pwd / "src" / "main" / "resources" / "json1.json")
  

当我在 docker 容器中运行此代码时,它说

docker-project-auth-container | java.nio.file.NoSuchFileException: /opt/docker/src/main/resources/json1.json

问题是我怎样才能让我的代码在这种情况下工作 因为我需要继续使用 sbt 本机打包程序,所以它创建了我的项目 jar 并且工作目录是 /opt/docker 在 docker 容器中,我的项目的 shell 脚本驻留在由 docker 创建的位置

这里是sbt native-packager创建的docker文件

FROM openjdk:8 as stage0
LABEL snp-multi-stage="intermediate"
LABEL snp-multi-stage-id="cc5bb9ac-866b-4baa-98e1-c4541030c6ae"
workdir /opt/docker
copY opt /opt
USER root
RUN ["chmod","-R","u=rX,g=rX","/opt/docker"]
RUN ["chmod","u+x,g+x","/opt/docker/bin/myproject-auth"]

FROM openjdk:8
USER root
RUN id -u demIoUrgos728 1>/dev/null 2>&1 || (( getent group 0 1>/dev/null 2>&1 || ( type groupadd 1>/dev/null 2>&1 && groupadd -g 0 root || addgroup -g 0 -S root )) && ( type useradd 1>/dev/null 2>&1 && useradd --system --create-home --uid 1001 --gid 0 demIoUrgos728 || adduser -S -u 1001 -G root demIoUrgos728 ))
workdir /opt/docker
copY --from=stage0 --chown=demIoUrgos728:root /opt/docker /opt/docker
EXPOSE 8083
USER 1001:0
ENTRYPOINT ["/opt/docker/bin/myproject-auth"]
CMD []

json1.json 存在于 native-packager 创建的 jar 中,但它存在于 root 中,而不存在于 src/main/resources 中

opt/docker/ 包含两个文件binlib bin 包含 myproject-auth.shmyproject-auth.batlib 包含 myproject-auth.jar 和其他库依赖项
如何让我的代码在 docker 容器内工作

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)