ASP.NET Core WebAPI在Docker环境运行时触发FileNotFoundException问题求助
问题原因
- 核心是路径分隔符跨平台不兼容:你本地运行在Windows环境,
\是合法的路径层级分隔符;而你的Docker镜像基于Linux内核的.NET镜像,系统默认路径分隔符为/,硬编码的.\Data\petronas.xlsx在Linux环境下会被识别为完整文件名的一部分,无法匹配到实际存在的/app/Data/petronas.xlsx路径。 - 你的Dockerfile中已经通过
COPY Data ./Data将Data目录复制到了容器的/app/Data路径下,文件复制逻辑本身没有问题。
解决方法
你可以任选以下任意一种方案修改代码:
方案1:使用.NET 跨平台路径拼接API(最推荐)
使用Path.Combine自动适配不同系统的路径分隔符,同时搭配AppContext.BaseDirectory获取程序根目录,避免相对路径的上下文歧义:
var filePath = Path.Combine(AppContext.BaseDirectory, "Data", "petronas.xlsx"); var lineitems = ConvertExcelToDataTable(filePath);
方案2:统一使用正斜杠作为路径分隔符
Windows环境也兼容正斜杠路径分隔符,直接修改硬编码的路径写法即可:
var lineitems = ConvertExcelToDataTable(@"./Data/petronas.xlsx");
验证方法
修改代码重新构建镜像运行后如果还有问题,可以执行以下命令进入容器确认文件是否存在:docker exec -it <你的容器ID> ls /app/Data
正常会输出petronas.xlsx的文件名。
内容的提问来源于stack exchange,提问作者SamuraiJack
相关产品推荐
相关产品推荐

