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

将.NET Core 3.1应用以容器镜像部署到Lambda时遇文件缺失错误

部署.NET Core 3.1 Lambda Docker镜像时提示找不到blank-csharp.deps.json

问题描述

我尝试构建Docker镜像并部署为运行C# .NET Core 3.1的Lambda函数,操作步骤如下:

  • 克隆空白C#示例仓库
  • 在src/blank-csharp目录下添加Dockerfile,内容如下:
FROM public.ecr.aws/lambda/dotnet:core3.1.2022.08.18.10

COPY . ${LAMBDA_TASK_ROOT}

CMD [ "blank-csharp::blankCsharp.Function::FunctionHandler" ]
  • 执行构建命令:docker build -t dotnet-container:latest .
  • 启动容器:docker run -p 9000:8080 dotnet-container:latest
  • 用curl调用函数:curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{"payload":"hello world!"}'

调用后出现错误:

{
  "errorType": "LambdaException",
  "errorMessage": "Could not find the required 'blank-csharp.deps.json'.  This file should be present at the root of the deployment package."
}

解决方案

这个错误的核心原因是直接复制项目源码到镜像中,Lambda运行时需要的是.NET项目编译后的输出文件,blank-csharp.deps.json是编译过程生成的依赖清单文件,源码目录里不存在这个文件。

需要使用多阶段构建的Dockerfile,先在SDK镜像中编译项目,再将编译产物复制到Lambda运行时镜像:

# 第一阶段:编译项目
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app/publish

# 第二阶段:构建Lambda运行镜像
FROM public.ecr.aws/lambda/dotnet:core3.1.2022.08.18.10
COPY --from=build /app/publish ${LAMBDA_TASK_ROOT}
CMD [ "blank-csharp::blankCsharp.Function::FunctionHandler" ]

重新执行以下步骤即可:

  1. 构建镜像:docker build -t dotnet-container:latest .
  2. 启动容器:docker run -p 9000:8080 dotnet-container:latest
  3. 再次用curl调用验证函数

注意:确保在src/blank-csharp目录下执行构建命令,保证Dockerfile能正确读取项目文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:36:17