运行 在 Docker 容器上写入 JAR 时写入文件夹中的文件导致 FileNotFoundException
Writing to a file in a folder while running a JAR on Docker Container results in FileNotFoundException
我正在 运行 在 Docker 容器中安装一个 JAR。我的应用程序的功能是连接到数据库并获取记录并将其输出到名为 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 图像构建成功,数据库连接成功,并且在 运行 期间尝试写入 csv 文件时,应用程序抛出异常,指出找不到指定的 folder/file( FileNotFound 异常)。
我做错了什么?
以下是在寻找解决方案时遇到的其他问题。
捆绑应用程序是否会保留项目结构? (因为我需要在 docker 容器中手动创建一个名为 reports 的文件夹)
我是否需要以任何方式为创建的文件夹(报告)提供权限? (我在这里做的)
代替:
RUN mkdir -p /apps/Consumer/
...
RUN mkdir -p /apps/Consumer/reports
使用WORKDIR作为:
WORKDIR /apps/Consumer/
COPY My-App-1.0.jar .
RUN chmod ugo+w /apps/Consumer/reports #giving write permission
我正在 运行 在 Docker 容器中安装一个 JAR。我的应用程序的功能是连接到数据库并获取记录并将其输出到名为 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 图像构建成功,数据库连接成功,并且在 运行 期间尝试写入 csv 文件时,应用程序抛出异常,指出找不到指定的 folder/file( FileNotFound 异常)。
我做错了什么?
以下是在寻找解决方案时遇到的其他问题。
捆绑应用程序是否会保留项目结构? (因为我需要在 docker 容器中手动创建一个名为 reports 的文件夹) 我是否需要以任何方式为创建的文件夹(报告)提供权限? (我在这里做的)
代替:
RUN mkdir -p /apps/Consumer/
...
RUN mkdir -p /apps/Consumer/reports
使用WORKDIR作为:
WORKDIR /apps/Consumer/
COPY My-App-1.0.jar .
RUN chmod ugo+w /apps/Consumer/reports #giving write permission