You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 09:07:26