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

Docker运行ASP.NET Core项目时提示‘No executable found matching command api.dll’求助

问题排查与解决建议

我来帮你梳理下问题根源,从你描述的场景来看,手动挂载能正常运行但Dockerfile构建后报错,大概率是以下几个细节出了问题:

1. DLL文件名写错了

你在ENTRYPOINT里指定的是api.dll,但ASP.NET Core项目发布后的DLL名称是你的项目实际名称(对应.csproj文件里的<AssemblyName>字段).dll,除非你的项目真的命名为api。

你可以先打开本地的./app文件夹,确认里面实际生成的DLL文件名是什么,比如项目叫WebApiDemo,那DLL应该是WebApiDemo.dll,把ENTRYPOINT里的文件名改成对应名称即可:

ENTRYPOINT [ "dotnet" , "WebApiDemo.dll" ]

2. Docker Build上下文路径异常

你执行docker build -t myapp/test:dev .时,当前工作目录是否真的包含./app文件夹?

  • 举个合理的项目结构示例:
    MyWebApi/
    ├── MyWebApi.csproj
    ├── Program.cs
    └── app/  # dotnet publish输出的文件夹
    
    这种情况下在MyWebApi/目录下执行build是没问题的,./app确实在Build上下文范围内。
  • 但如果是在MyWebApi/app/目录下执行build,那COPY ./app .就会找不到目标文件,此时应该改成COPY . .,同时确认ENTRYPOINT里的DLL名称正确。

3. 基础镜像的可选优化(非报错直接原因,但建议调整)

你使用的microsoft/dotnet是较旧的镜像,现在官方推荐使用mcr.microsoft.com/dotnet/aspnet系列的运行时镜像,更轻量且维护更及时。比如你的项目基于.NET 6,Dockerfile可以调整为:

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /test/app
COPY ./app .
ENTRYPOINT [ "dotnet" , "你的项目名称.dll" ]

快速验证方法

你可以先进入构建好的镜像内部,直接查看文件是否存在,定位问题:

docker run --rm -it myapp/test:dev bash
# 进入容器后执行以下命令查看文件
ls /test/app

如果看不到目标DLL,说明是COPY路径有问题;如果能看到但名称不匹配,就是ENTRYPOINT里的文件名写错了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:25:40