这是我第一次尝试在asp.netcore 5.0应用程序中运行docker映像,我在docker文件中添加了以下配置。
FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["Shopping.Client/Shopping.Client.csproj", "Shopping.Client/"]
RUN dotnet restore "Shopping.Client/Shopping.Client.csproj"
COPY . .
WORKDIR "/src/Shopping.Client"
RUN dotnet build "Shopping.Client.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "Shopping.Client.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Shopping.Client.dll"]
我正在尝试使用以下代码访问wwwroot
文件夹中的文件:
private async Task<T> ReadAsync<T>(string filePath)
{
using FileStream stream = File.OpenRead(filePath);
return await JsonSerializer.DeserializeAsync<T>(stream);
}
public async Task<List<Product>> GetProducts()
{
var filePath = System.IO.Path.Combine(_env.ContentRootPath, @"wwwroot\Db\product.json");
return await ReadAsync<List<Product>>(filePath);
}
当我运行应用程序并尝试访问wwwroot中的文件时,我得到的错误为:
执行请求时发生未处理的异常。
System.IO.FileNotFoundException:无法找到文件“/”。文件名:“/应用程序/wwwroot\数据库\产品. json”
我是否应该在docker文件中包含任何特殊内容以复制wwwroot文件夹,或者我是否需要根据docker映像中的路径添加文件路径?
2条答案
按热度按时间kpbwa7wx1#
看起来您正在使用Linux容器和Windows文件路径约定。Path.合并确实支持这一点,但它需要一些帮助。
/app/wwwroot\Db\product.json
请访问wwwroot/数据库/产品. json
如果这是您的问题,您可能希望检查Path.合并的重载,因为Combine方法具有接受附加参数的附加重载
1.公共静态字符串合并(字符串路径1、字符串路径2、字符串路径3)
1.公共静态字符串合并(字符串路径1、字符串路径2、字符串路径3、字符串路径4)
1.公共静态字符合并(参数string[]路径)
**您的代码:**路径.合并(_env.内容根路径,@“wwwroot\Db\product.json”);
**将变成类似于:**路径.合并(basePath,“wwwroot”,“Db”,“product.json”);
0x6upsns2#
请通过Try..Catch块进行尝试。例如:
对于运行容器,可以使用以下命令
使用卷在:您可以在以下路径中看到卷列表:(在窗口上)
\wsl.本地主机\停靠器桌面数据\数据\停靠器\卷
或者,您可以使用装载路径:(不推荐),例如,您希望保存在c:\Db中