我在一个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)提供权限吗?(我在这里做了)
以此来代替.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