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

Docker环境下ASP.NET Core无法找到programminglanguage.js文件求助

解决Docker环境下ASP.NET Core无法找到programminglanguage.js文件的问题

问题说明

本地开发时,ASP.NET Core应用可正常读取programminglanguage.js文件初始化数据库,但Docker环境运行时提示文件找不到。docker compose build构建成功,但运行时抛出以下错误:

2024-09-21 04:40:15 Unhandled exception. System.IO.FileNotFoundException: Could not find file '/app/..\..\..\..\..\mock\programminglanguages\programminglanguage.js'

现有Dockerfile

FROM mcr.microsoft.com/dotnet/sdk:8.0 as build
WORKDIR /app
EXPOSE 80

COPY TotechsThunder.sln TotechsThunder.sln
COPY mock/programminglanguages/programminglanguage.js mock/programminglanguages/programminglanguage.js
COPY src/LightningLanes/API/LightningLanes.csproj src/LightningLanes/API/LightningLanes.csproj
COPY src/LightningLanes/Core/LightningLanes.Core/LightningLanes.Core.csproj src/LightningLanes/Core/LightningLanes.Core/LightningLanes.Core.csproj
COPY src/LightningLanes/Jobs/LightningLanes.HangfireJobHost/LightningLanes.HangfireJobHost.csproj src/LightningLanes/Jobs/LightningLanes.HangfireJobHost/LightningLanes.HangfireJobHost.csproj
COPY src/Features/GitHubFeatures/Logics/Logics.csproj src/Features/GitHubFeatures/Logics/Logics.csproj
COPY src/Features/GitHubFeatures/Tests/Tests.csproj src/Features/GitHubFeatures/Tests/Tests.csproj
COPY src/Technologies/Technologies.csproj src/Technologies/Technologies.csproj
COPY src/Projects/Projects.csproj src/Projects/Projects.csproj
COPY src/Contracts/Contracts.csproj src/Contracts/Contracts.csproj
COPY src/IdentityServer/IdentityServer.csproj src/IdentityServer/IdentityServer.csproj
COPY src/Gateway/Gateway.csproj src/Gateway/Gateway.csproj

RUN dotnet restore TotechsThunder.sln

COPY src/Technologies src/Technologies
COPY src/Contracts src/Contracts
WORKDIR /app/src/Technologies
RUN dotnet publish -c Release -o /app/src/out

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
COPY --from=build /app/src/out .
ENTRYPOINT [ "dotnet", "Technologies.dll" ]

文件读取代码

string baseDir = AppDomain.CurrentDomain.BaseDirectory;
string relativePath = @"..\..\..\..\..\mock\programminglanguages\programminglanguage.js";
string fullPath = Path.GetFullPath(Path.Combine(baseDir, relativePath));

项目结构

根目录下包含:

  • mock文件夹:内有programminglanguages/programminglanguage.js
  • src文件夹:包含Technologies等多个子项目
  • 解决方案文件TotechsThunder.sln

已尝试操作

  • 尝试检查容器内文件,但不熟悉发布版Docker环境的文件系统,未完成排查

期望结果

  • programminglanguage.js能被正确复制到容器内
  • 现有相对路径代码无需修改即可找到文件

解决方案:保持容器内目录结构与本地一致

问题核心是Docker最终镜像的目录结构与本地开发环境不一致,导致相对路径解析失败。修改Dockerfile,让容器内的目录结构和本地匹配:

FROM mcr.microsoft.com/dotnet/sdk:8.0 as build
WORKDIR /app
EXPOSE 80

# 复制整个项目结构(替代单个文件/项目文件的复制,更简洁)
COPY TotechsThunder.sln TotechsThunder.sln
COPY mock/ mock/
COPY src/ src/

RUN dotnet restore TotechsThunder.sln

WORKDIR /app/src/Technologies
# 发布到和本地一致的目录结构
RUN dotnet publish -c Release -o ./bin/Release/net8.0/publish

FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
# 复制mock文件夹和发布后的文件,保持本地目录结构
COPY --from=build /app/mock/ mock/
COPY --from=build /app/src/Technologies/bin/Release/net8.0/publish src/Technologies/bin/Release/net8.0/publish

# 切换到和本地一致的发布目录作为工作目录
WORKDIR /app/src/Technologies/bin/Release/net8.0/publish
ENTRYPOINT [ "dotnet", "Technologies.dll" ]

验证容器内文件的方法

如果需要确认文件是否存在,可运行以下命令进入容器查看:

# 替换为你的镜像名称或容器ID
docker run -it --entrypoint bash your-image-name
# 查看目录结构
ls -R /app

内容的提问来源于stack exchange,提问作者strypperjason115

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:44:55