docker 中找不到文件

问题描述 投票:0回答:1

这是我的 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" ]

我在使用

programminglanguage.js
文件时遇到问题。该文件包含主数据,我的 ASP.NET Core 应用程序在初始化期间使用主数据将数据播种到数据库迁移中。在我的开发环境中一切正常,但是当我在Docker环境中运行项目时,找不到该文件。

当我运行

docker compose build
时,服务构建成功。然而,当项目在Docker中运行时,我遇到了以下错误:

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

这是我在迁移期间用于读取文件以进行播种的代码:

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

在 Docker 中,问题似乎源于相对文件路径未正确解析。如果您能帮助解决此问题,我将不胜感激,以便应用程序可以在 Docker 环境中找到该文件。

我的项目中的文件位置

enter image description here

我尝试过的:

尝试检查docker容器内部是否有programminglanguage.js文件,但release + docker环境文件系统对我来说太陌生,无法进行调查

我的期待:

programminglanguage.js 被复制到容器和路径中

string relativePath = @"..\..\..\..\..\mock\programminglanguages\programminglanguage.js";

检索文件不应导致没有文件

asp.net docker
1个回答
0
投票

问题可能在于使用反斜杠

\
而不是普通的反斜杠,因为Docker运行的是基于Linux的镜像,Windows文件路径将无法被很好地识别

作为答案发布,因为评论需要更多声誉(???)

© www.soinside.com 2019 - 2024. All rights reserved.