java 运行docker image时出现FileNotFoundException

56lgkhnf  于 2023-05-05  发布在  Java
关注(0)|答案(1)|浏览(243)

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

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

JSON文件位于resources文件夹下。
在本地主机上一切正常。但在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上不起作用。
目录结构如下-x1c 0d1x

jdzmm42g

jdzmm42g1#

请参阅dockerfile中的基本问题是
您正在设置WORKDIR,而COPY您在/home/app中说COPY,因此如果您设置WORKDIR,则意味着任何RUNCMDADDCOPYENTRYPOINT命令将在指定的工作目录中执行。

为了避免混淆,请尝试如下

# 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

相关问题