Java 在 Docker 容器中 运行 时找不到文件

Java can't find file while running in Docker container

我在我的代码中引用了一个 HTML 文件,并通过以下方式访问它:

Path filePath1 = Path.of("./email.html");

当我在本地运行项目时,项目工作正常,文件加载正常。但是,当 运行 在 Docker 容器中安装项目时,出现以下错误:

java.nio.file.NoSuchFileException: ./email.html

这是我的Docker文件供参考

FROM openjdk:11.0-jdk-slim as builder

VOLUME /tmp
COPY . .
RUN apt-get update && apt-get install -y dos2unix
RUN dos2unix gradlew
RUN ./gradlew build

# Phase 2 - Build container with runtime only to use .jar file within
FROM openjdk:11.0-jre-slim
WORKDIR /app
# Copy .jar file (aka, builder)
COPY --from=builder build/libs/*.jar app.jar
ENTRYPOINT ["java", "-Xmx300m",  "-Xss512k", "-jar", "app.jar"]
EXPOSE 8080

感谢您的回答。所以这是一个 Java 项目,所以没有 index.html 可以添加。我尝试将工作目录更改为 /src,但它仍然无法获取它

Docker 无法从主机 OS 访问文件系统。 你也需要把它放在那里:

COPY ./index.html index.html

有几个选项:

  1. 复制 docker 图像中的 index.html(由 ~dominik-lovetinsky 解决)
  2. 将包含 index.html 文件的目录作为卷安装在 docker 实例中。
  3. 将 index.html 作为资源包含在您的 app.jar 中,并将其作为类路径资源访问。

最后一个选项:将资源作为类路径资源包括在内,是网络应用程序的正常工作方式,但我不确定它是否适合您。