从 dockerized 解决方案中的项目根目录访问文件
access to file from the project root inside dockerized solution
Docker 文件
FROM public.ecr.aws/lambda/dotnet:6 AS base
FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim as build
WORKDIR /src
COPY ["AWSServerless.csproj", "AWSServerless/"]
RUN dotnet restore "AWSServerless/AWSServerless.csproj"
WORKDIR "/src/AWSServerless"
COPY . .
RUN dotnet build "AWSServerless.csproj" --configuration Release --output /app/build
FROM build AS publish
RUN dotnet publish "AWSServerless.csproj" \
--configuration Release \
--runtime linux-x64 \
--self-contained false \
--output /app/publish \
-p:PublishReadyToRun=true
FROM base AS final
WORKDIR /var/task
CMD ["AWSServerless::AWSServerless.LambdaEntryPoint::FunctionHandlerAsync"]
COPY --from=publish /app/publish .
项目源结构
AWSServerless
Controllers
ValuesController.cs
appsettings.json
Dockerfile
Startup.cs
MyFile.mp4
我正在尝试从控制器访问此 MyFile.mp4 文件
var image = Image.FromFile("/var/task/MyFile.mp4");
但我得到了
System.IO.FileNotFoundException:
/var/task/MyFile.mp4
我试过其他路径
var image = Image.FromFile("/src/MyFile.mp4");
var image = Image.FromFile("/src/AWSServerless/MyFile.mp4");
None 本作品 (System.IO.FileNotFoundException
)。
我在这里做错了什么?
我有同样的问题,这是因为这个文件是外部的,不包含在发布过程中,所以从我的情况来看,你可以通过连接到[=29=来检查发布后是否有这个文件] 命令:
docker container exec -it container_Your_name ls /var/task
如果没有这个文件,问题出在你的发布命令上。
我想您需要在发布中包含外部文件,例如:
在文件的属性中,您可以将 Copy to output directory
设置为 Copy always
或者您可以编辑解决方案文件,展开所需文件的 xml 标签并添加 <CopyToOutputDirectory>Always</CopyToOutputDirectory>
作为 sub-tag.
或者您可以在 XML:
中手动完成
<ItemGroup>
<Content Include="AppData\**" CopyToPublishDirectory="PreserveNewest"/>
</ItemGroup>
对我有帮助,否则你可以试试这个方法:
Docker 文件
FROM public.ecr.aws/lambda/dotnet:6 AS base
FROM mcr.microsoft.com/dotnet/sdk:6.0-bullseye-slim as build
WORKDIR /src
COPY ["AWSServerless.csproj", "AWSServerless/"]
RUN dotnet restore "AWSServerless/AWSServerless.csproj"
WORKDIR "/src/AWSServerless"
COPY . .
RUN dotnet build "AWSServerless.csproj" --configuration Release --output /app/build
FROM build AS publish
RUN dotnet publish "AWSServerless.csproj" \
--configuration Release \
--runtime linux-x64 \
--self-contained false \
--output /app/publish \
-p:PublishReadyToRun=true
FROM base AS final
WORKDIR /var/task
CMD ["AWSServerless::AWSServerless.LambdaEntryPoint::FunctionHandlerAsync"]
COPY --from=publish /app/publish .
项目源结构
AWSServerless
Controllers
ValuesController.cs
appsettings.json
Dockerfile
Startup.cs
MyFile.mp4
我正在尝试从控制器访问此 MyFile.mp4 文件
var image = Image.FromFile("/var/task/MyFile.mp4");
但我得到了
System.IO.FileNotFoundException: /var/task/MyFile.mp4
我试过其他路径
var image = Image.FromFile("/src/MyFile.mp4");
var image = Image.FromFile("/src/AWSServerless/MyFile.mp4");
None 本作品 (System.IO.FileNotFoundException
)。
我在这里做错了什么?
我有同样的问题,这是因为这个文件是外部的,不包含在发布过程中,所以从我的情况来看,你可以通过连接到[=29=来检查发布后是否有这个文件] 命令:
docker container exec -it container_Your_name ls /var/task
如果没有这个文件,问题出在你的发布命令上。
我想您需要在发布中包含外部文件,例如:
在文件的属性中,您可以将 Copy to output directory
设置为 Copy always
或者您可以编辑解决方案文件,展开所需文件的 xml 标签并添加 <CopyToOutputDirectory>Always</CopyToOutputDirectory>
作为 sub-tag.
或者您可以在 XML:
中手动完成<ItemGroup>
<Content Include="AppData\**" CopyToPublishDirectory="PreserveNewest"/>
</ItemGroup>
对我有帮助,否则你可以试试这个方法: