Blazor WebAssembly项目在Docker中运行报错退出码145如何解决?
问题根因
你当前使用的Dockerfile是服务端ASP.NET Core应用的标准配置,不适用于Blazor WebAssembly项目:
- Blazor WebAssembly是纯前端静态站点,发布产物只有HTML、CSS、JS、WASM等静态资源,不存在可执行的
client.dll入口文件 - 最终运行阶段使用
aspnet:5.0-focal作为基础镜像完全冗余,执行dotnet client.dll命令自然会找不到对应文件报错
修复方案
1. 替换Dockerfile内容
采用SDK镜像构建+Nginx托管静态资源的方案:
# 构建阶段:用.NET SDK完成项目发布 FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS build WORKDIR /src COPY ["client.csproj", "./"] RUN dotnet restore "client.csproj" COPY . . RUN dotnet build "client.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "client.csproj" -c Release -o /app/publish # 运行阶段:用Nginx托管静态站点 FROM nginx:alpine AS final WORKDIR /usr/share/nginx/html # 复制Blazor发布生成的静态资源 COPY --from=publish /app/publish/wwwroot . # 适配Blazor路由,新增Nginx配置(可选,单页应用路由必备) COPY nginx.conf /etc/nginx/nginx.conf
2. 新增Nginx配置文件
在Dockerfile同目录下新建nginx.conf文件,解决Blazor前端路由刷新404问题:
events { } http { include /etc/nginx/mime.types; server { listen 80; location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html =404; } } }
3. 修改docker-compose.yml端口映射
Nginx默认监听80端口,调整端口映射规则:
version: '3.4' services: client: image: client build: context: . dockerfile: ./Dockerfile ports: - 5000:80
特殊情况排查(仅适用于Blazor Server项目)
如果你实际使用的是Blazor Server而非WebAssembly,请按以下点排查:
- 执行
docker build --target publish -t test-publish .构建发布阶段镜像,再执行docker run --rm test-publish ls /app/publish确认是否存在client.dll文件 - 检查
client.csproj中是否配置了自定义<AssemblyName>或<OutputPath>,导致发布产物名称、路径与预期不符 - 确认构建上下文路径为
client.csproj所在根目录,避免COPY指令找不到项目文件导致发布失败
内容的提问来源于stack exchange,提问作者John D
相关产品推荐
相关产品推荐

