在Docker容器上运行JAR时,对文件夹中的文件进行写入会导致FileNotFoundException。

问题描述 投票:0回答:1

我在一个Docker容器中运行一个JAR。我的应用程序的功能是连接到一个DB,获取记录并将其输出到一个名为reports的文件夹内的.csv文件。

我的src文件夹和reports文件夹都在同一个目录下。这意味着我可以像下面这样写入文件。

String csvFile = "." + File.separator + "reports" + File.separator + "VAS_Report_" + subscriberType +
                df.format(new Date()) + ".csv";

//db connection and result extraction logic
........

CSVWriter csvWriter = new CSVWriter(new FileWriter(csvFile));
csvWriter.writeAll(resultSet, true);

当我在本地运行这个程序时,这很好用。我构建项目并将其捆绑为一个JAR文件。

我创建了一个docker文件,其中包含其他相关步骤和以下步骤(在复制JAR文件的文件夹中创建一个名为reports的文件夹)。

RUN mkdir -p /apps/Consumer/
COPY My-App-1.0.jar /apps/Consumer/

RUN mkdir -p /apps/Consumer/reports
RUN chmod ugo+w /apps/Consumer/reports #giving write permission

Docker镜像构建成功,db连接成功,在运行期间,当它试图写入csv文件时,应用程序抛出异常,说明它无法找到指定的文件夹文件(FileNotFound异常)。

我在这里做错了什么?

以下是在寻找解决方案时遇到的其他问题。

捆绑一个应用程序是否会保留项目结构?(因为我需要在docker容器中手动创建一个名为reports的文件夹)我需要以任何方式为创建的文件夹(reports)提供权限吗?(我在这里做了)

java docker jar dockerfile filenotfoundexception
1个回答
0
投票

以此来代替.csv文件。

RUN mkdir -p /apps/Consumer/
...
RUN mkdir -p /apps/Consumer/reports

使用 工作区 作为:

WORKDIR /apps/Consumer/
COPY My-App-1.0.jar .
RUN chmod ugo+w /apps/Consumer/reports #giving write permission
© www.soinside.com 2019 - 2024. All rights reserved.