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

Ubuntu下Docker无法启动Blazor项目问题求助

解决Blazor Docker容器启动报错:找不到SampleBlazor.dll或无.NET SDK

问题场景

在Ubuntu 24.04上用Rider 2025.1.3创建.NET 9 Blazor Server项目(默认带Counter/Weather页面,本地运行正常),使用Rider自动生成的Dockerfile构建镜像后,容器启动失败,报错:

The command could not be loaded, possibly because:

  • You intended to execute a .NET application:
    The application 'SampleBlazor.dll' does not exist.
  • You intended to execute a .NET SDK command:
    No .NET SDKs were found.

已禁用Rider的fast build功能,自动生成的Dockerfile如下:

FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["SampleBlazor/SampleBlazor.csproj", "SampleBlazor/"]
RUN dotnet restore "SampleBlazor/SampleBlazor.csproj"
COPY . .
WORKDIR "/src/SampleBlazor"
RUN dotnet build "./SampleBlazor.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./SampleBlazor.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SampleBlazor.dll"]

解决步骤

1. 确认发布输出的程序集名称

本地执行发布命令,查看输出目录的文件:

dotnet publish -c Release

进入bin/Release/net9.0/publish目录,检查是否存在SampleBlazor.dll。若文件名有差异(比如带后缀或命名变化),同步修改Dockerfile中ENTRYPOINT的文件名。

2. 检查Docker构建上下文

执行docker build命令时,确保当前工作目录是项目根目录(即包含SampleBlazor子文件夹的目录),否则COPY步骤会找不到项目文件,导致发布不完整。

3. 排查权限问题

暂时注释掉USER $APP_UID行,测试是否因权限不足无法读取文件:

FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
# USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

若启动正常,再重新配置用户权限。

4. 验证发布阶段输出

在publish阶段添加查看命令,确认文件是否生成:

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./SampleBlazor.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false
# 验证发布文件
RUN ls -la /app/publish

构建时查看输出,确认SampleBlazor.dll存在于目标目录。

修正后的Dockerfile示例

FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["SampleBlazor/SampleBlazor.csproj", "SampleBlazor/"]
RUN dotnet restore "SampleBlazor/SampleBlazor.csproj"
COPY . .
WORKDIR "/src/SampleBlazor"
RUN dotnet build "./SampleBlazor.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./SampleBlazor.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "SampleBlazor.dll"]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 20:22:26