Docker环境下C#/ASP.NET Core Web API访问/root路径被拒绝求助
ASP.NET Core Web API Docker部署文件访问问题
问题背景
本地已安装Docker Desktop,为Visual Studio 2022创建的C# ASP.NET Core Web API项目配置了Dockerfile,此前运行正常。添加访问appsettings.json的服务注册代码后出现文件访问错误,已拥有项目和Docker的管理员完全权限,怀疑遗漏配置。
Dockerfile代码
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base USER app WORKDIR /app EXPOSE 8080 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src . . . . FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./webapi_project.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "webapi_project.dll"]
错误信息
Unhandled exception. System.IO.FileNotFoundException: Could not find file '/app/appsettings.json'. File name: '/app/appsettings.json'
排查与解决步骤
- 确认文件复制属性:在Visual Studio中右键
appsettings.json,进入属性面板,将「复制到输出目录」设置为「始终复制」或「如果较新则复制」,确保发布时文件被同步到输出目录。 - 验证容器内文件存在性:启动容器后执行
docker exec -it <容器ID> /bin/bash进入终端,运行ls /app查看是否存在appsettings.json,确认publish阶段是否正确完成文件复制。 - 调整容器内文件权限:当前Dockerfile中
base阶段使用USER app,该用户可能缺少文件访问权限。修改final阶段代码,临时切换到root用户修正权限后再切回app:FROM base AS final WORKDIR /app COPY --from=publish /app/publish . USER root RUN chown -R app:app /app USER app ENTRYPOINT ["dotnet", "webapi_project.dll"] - 检查代码中文件路径:确保代码中访问
appsettings.json使用的是相对路径,例如Path.Combine(Directory.GetCurrentDirectory(), "appsettings.json"),保证在容器工作目录/app下能正确定位文件。
内容的提问来源于stack exchange,提问作者SSD
相关产品推荐
相关产品推荐

