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
有几个选项:
- 复制 docker 图像中的 index.html(由 ~dominik-lovetinsky 解决)
- 将包含 index.html 文件的目录作为卷安装在 docker 实例中。
- 将 index.html 作为资源包含在您的 app.jar 中,并将其作为类路径资源访问。
最后一个选项:将资源作为类路径资源包括在内,是网络应用程序的正常工作方式,但我不确定它是否适合您。
我在我的代码中引用了一个 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
有几个选项:
- 复制 docker 图像中的 index.html(由 ~dominik-lovetinsky 解决)
- 将包含 index.html 文件的目录作为卷安装在 docker 实例中。
- 将 index.html 作为资源包含在您的 app.jar 中,并将其作为类路径资源访问。
最后一个选项:将资源作为类路径资源包括在内,是网络应用程序的正常工作方式,但我不确定它是否适合您。