【问题标题】:Containerrizing Hosted Blazor WebAssembly for Raspberry Pi Docker Swarm为 Raspberry Pi Docker Swarm 容器化托管的 Blazor WebAssembly
【发布时间】:2020-12-08 03:52:46
【问题描述】:

我正在开发一个 DotNet Core 托管的 Blazor WebAssembly,作为后端 ASPNet Core API 的前端,在 Raspberry Pi 上运行,在 Docker Swarm 中进行容器化。

我在 MacBook Pro 上进行开发,使用 VSCode for Mac,它确实是一个很棒的工具。我将解决方案创建为“dotnet new blazorwasm —hosted”,并创建并构建了解决方案。

我已经安装了 Docker Desktop,并为 arm 创建了一个 Buildx 构建器,它与我的所有其他解决方案(DotNet Core API、DotNet 后台解决方案)配合得很好,但是使用托管的 blazorwasm 解决方案时,我遇到了几个问题,可能是由于由于我缺乏设置构建选项的知识。

所以我安装了 Visual Studio 2019(我在 Windows 上使用 VS 已有 20 年了),实际上对它的外观和感觉感到惊讶,这是一个非常棒的工具。

我创建了托管的 Blazor WebAssembly 解决方案,它在 Mac 上运行良好,甚至 Docker 桌面集成也没有问题。

构建 Docker 镜像很简单,我只是使用了我的 Buildx 构建器,并从命令行执行以下命令:

“docker buildx build --file ./SnakeConsole/Server/Dockerfile --platform linux/arm/v7 -t jagdriver/wavesnake:SnakeConsole3 --push .”

然后,我在 Raspberry Swarm 上创建了堆栈/容器。 Stack 已安装但容器拒绝启动,日志为:

standard_init_linux.go:211: exec 用户进程导致“exec 格式错误”。

我以前见过这个错误,据我所知,我在 dotnet publish 命令中添加了“-r ubuntu.19.10-arm”,以确保为 linux-arm 生成代码。

所以我尝试在 dockerfile 下面的 dotnet publish 命令中添加“-r ubuntu.19.10-arm”,然后再次执行 Docker buildx build 命令,但随后 Build Engine 出现以下错误。

project.assets.json' 没有 '.NETCoreApp,Version=v5.0/browser-wasm' 的目标。确保恢复已运行,并且您已在项目的 TargetFrameworks 中包含“net5.0”。您可能还需要在项目的 RuntimeIdentifiers 中包含“browser-wasm”

谁能帮我解决这个问题,提前谢谢。

事实:

  1. 我提到的解决方案是标准 Hosted Blazor WebAssembly 模板没有任何更改。
  2. 目标框架是.Net 5.0
  3. Visual Studio for Mac 社区版本为 8.7.2(内部版本 4)

来自默认托管的 Blazor WebAssembly 模板的 Docker 文件。

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0-buster-slim AS build
WORKDIR /src
COPY SnakeConsole/Server/SnakeConsole.Server.csproj SnakeConsole/Server/
COPY SnakeConsole/Client/SnakeConsole.Client.csproj SnakeConsole/Client/
COPY SnakeConsole/Shared/SnakeConsole.Shared.csproj SnakeConsole/Shared/
RUN dotnet restore "SnakeConsole/Server/SnakeConsole.Server.csproj"
COPY . .
WORKDIR "/src/SnakeConsole/Server"
RUN dotnet build "SnakeConsole.Server.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "SnakeConsole.Server.csproj" -c Release -o /app/publish

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

【问题讨论】:

    标签: blazor-webassembly


    【解决方案1】:

    遇到过类似的问题,文档说:

    目前不支持将独立的 Blazor WebAssembly 应用部署到适用于 Linux 的 Azure 应用服务。用于托管应用程序的 Linux 服务器映像目前不可用。启用此方案的工作正在进行中。

    https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-5.0#standalone-deployment

    看起来这是一个 Docker 操作系统兼容性和框架功能问题。我建议将您的应用程序定位到服务器(Blazor 服务器托管模型方案)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-25
      • 2021-06-25
      • 1970-01-01
      • 2021-06-22
      • 2023-03-17
      • 1970-01-01
      • 2020-12-13
      • 2021-03-27
      相关资源
      最近更新 更多