【问题标题】:FileNotFoundException while running docker image运行 docker 映像时出现 FileNotFoundException
【发布时间】:2020-05-25 17:03:51
【问题描述】:

我已经配置了一个 Firebase 属性文件如下 -

@Bean
Firestore firestore() throws IOException {
    InputStream serviceAccount = new FileInputStream("my-karwaan-firebase-adminsdk.json");
    GoogleCredentials credentials = GoogleCredentials.fromStream(serviceAccount);

JSON 文件位于资源文件夹下。

在本地主机上一切正常。 但是在 docker 上,它在运行 docker image 时会抛出

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate 
[com.google.cloud.firestore.Firestore]: Factory method 'firestore' threw exception; nested
 exception is java.io.FileNotFoundException: my-karwaan-firebase-adminsdk.json

Docker文件内容如下-

# Build Jar File
FROM maven:3.6.3-jdk-8-slim as stage1
WORKDIR /home/app
COPY . /home/app
RUN mvn -f /home/app/pom.xml clean package

# Create an Image
FROM openjdk:8-jdk-alpine
EXPOSE 8080
COPY --from=stage1 /home/app/target/myapp.jar myapp.jar
ENTRYPOINT ["java", "-jar", "myapp.jar"]

我试图给出一个绝对路径,但它在 docker 上不起作用。

目录结构如下——

【问题讨论】:

  • 您要复制到结果图像中的唯一文件是 jar 文件。 Docker 的主要功能之一是文件系统隔离:除非您不遗余力地对其进行配置,否则容器无法查看或访问主机系统上的文件(反之亦然)。
  • 这里提供配置的最佳方式是什么?
  • 您的dockerfile 的位置在哪里??
  • @DupinderSingh 在项目目录中
  • 表示根位置我对吗?

标签: java docker dockerfile


【解决方案1】:

看你dockerfile的基本问题是

你正在设置WORKDIR,而COPY你在/home/app中说COPY,所以如果你设置WORKDIR,那么它意味着任何RUN,CMD,ADD,COPY,或ENTRYPOINT 命令将在指定的工作目录中执行。

为了避免混淆,请尝试以下操作

# Build Jar File
FROM maven:3.6.3-jdk-8-slim as stage1
WORKDIR /home/app
#COPY FROM PROJECT ROOT DIR TO WORKING ROOT DIR i.e: /home/app 
COPY . .
RUN mvn -f /home/app/pom.xml clean package

# Create an Image
FROM openjdk:8-jdk-alpine
EXPOSE 8080
COPY --from=stage1 /home/app/target/myapp.jar myapp.jar
ENTRYPOINT ["java", "-jar", "myapp.jar"]

试试这个:)

PS: 启动容器后,请执行 exec 并检查所有项目详细信息是否在正确的目录中,mvn build 是否正在构建具有正确名称的 jar

【讨论】:

    猜你喜欢
    • 2019-10-19
    • 1970-01-01
    • 2022-08-10
    • 1970-01-01
    • 2017-06-05
    • 2017-10-10
    • 2017-03-26
    • 2023-03-27
    相关资源
    最近更新 更多