.NET Core 5 Web API Docker容器提示AppSettings.json不存在问题求助
问题原因及解决方案
1. 大小写不匹配问题
Linux 系统(本次使用的容器基础镜像为 Ubuntu 20.04 focal)对文件名大小写完全敏感,而 Windows/macOS 默认大小写不敏感,因此本地运行正常的项目在容器中可能出现文件名识别问题。
你需要核对两处信息:
- 代码中加载配置文件时填写的文件名,和容器内实际存在的文件名大小写是否完全一致。注意 .NET 默认的配置文件名为全小写的
appsettings.json,如果代码中写为AppSettings.json就会触发该错误。 - 检查
HabitAPI.Api.csproj文件中配置文件的复制规则,确认输出的文件名和代码中加载的名称完全匹配。
2. 文件权限不足问题
你在 Dockerfile 中使用非 root 用户 appuser 运行程序,即使文件实际存在,如果 appuser 没有该文件的读取权限,.NET 运行时也会抛出「文件不存在」的异常(底层无权限的系统调用会被上层逻辑包装为文件不存在错误)。
解决方法是在 Dockerfile 的 final 阶段增加权限修正指令,确保所有文件对运行用户可读:
FROM base AS final WORKDIR /app COPY --from=publish /app/publish . # 新增以下行,修正文件读取权限 RUN chmod -R a+r /app ENTRYPOINT ["dotnet", "HabitAPI.Api.dll"]
3. 配置加载路径错误
检查 Program.cs 中的配置加载逻辑,确认没有写死本地绝对路径,也没有错误修改配置文件的加载根目录。你可以在配置构建代码前增加日志,输出当前工作目录和目录下的所有文件列表,确认路径是否符合预期。
内容的提问来源于stack exchange,提问作者user15315766
相关产品推荐
相关产品推荐

