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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:51:01