gpt4 book ai didi

.net - 支持 docker 的 Blazor WebAssembly 应用程序 (linux)

转载 作者:行者123 更新时间:2023-12-04 11:04:06 25 4
gpt4 key购买 nike

今天我有一个问题是其中一个问题,你一直想知道但你总是害怕问;)但是这个问题也与 BlazorWebAssembly 应用程序 docker 支持相关。所以也许我会描述我做了什么。
所以我确实想玩一点尖端 blazor,当然还有 .NET 5.0(我最后的“尖端技术”是 ASP.NET MVC - 所以是的,已经有一段时间了 :))
一开始我不太清楚与 Blazor 相关的那些选项是做什么用的。所以我选择了:
enter image description here
您可以发现,“启用 Docker 支持”选项是灰色的。所以就像“docker 支持问题预览”:)
我不知道什么选项:“ASP.NET Core 托管”代表什么,所以我没有使用它(这是一个错误)一旦您选中此选项,它将创建一个服务器应用程序,一个客户端(Blazor)一个和一个共享(用于它们之间的模型目的)
我不知道,所以我必须添加我自己的 WebApi 项目和一些模型项目:)
现在,下一步是添加 docker 支持(令人惊讶的是这是可能的)
enter image description here
这创建了一个 docker 文件:

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

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 ["BlazorApp/BlazorApp.csproj", "BlazorApp/"]
COPY ["../SearchMovies.Model/SearchMovies.Model.csproj", "../SearchMovies.Model/"]
RUN dotnet restore "BlazorApp/BlazorApp.csproj"
COPY . .
WORKDIR "/src/BlazorApp"
RUN dotnet build "BlazorApp.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "BlazorApp.dll"]
启动这样的应用程序将以这样的方式结束:
docker exec -i -e ASPNETCORE_HTTPS_PORT="32776" -w "/app" 28d444a42ceefdf124b29f9f542f423aa931e521d077bbfeb19e5da7644a5e25 sh -c ""dotnet" --additionalProbingPath /root/.nuget/fallbackpackages2 --additionalProbingPath /root/.nuget/fallbackpackages --additionalProbingPath /root/.nuget/fallbackpackages3  \"/app/bin/Debug/net5.0/BlazorApp.dll\" | tee /dev/console"
Cannot use file stream for [/app/bin/Debug/net5.0/BlazorApp.deps.json]: No such file or directory
A fatal error was encountered. The library 'libhostpolicy.so' required to execute the application was not found in '/app/bin/Debug/net5.0/'.
Failed to run as a self-contained app.
- The application was run as a self-contained app because '/app/bin/Debug/net5.0/BlazorApp.runtimeconfig.json' was not found.
- If this should be a framework-dependent app, add the '/app/bin/Debug/net5.0/BlazorApp.runtimeconfig.json' file and specify the appropriate framework.
我已经用谷歌搜索过了,答案是:是的,这是正常行为。 Blazor 只是一个静态文件(它只是“智能”生成的)所以这就是它不起作用的原因。 Tbh,我听到他们的声音,但仍然......为什么或为什么?
我用谷歌搜索了一下。我在这里找到了一些关于 Blazor Webassembly 的好文章:
https://medium.com/@waelkdouh/hosting-containerized-client-side-blazor-applications-on-azure-e090af738619
一开始的一些有趣的事实(文章中的引述)

Note: I imagine this checkbox will be enabled sometime in the future


所以,伙计们,只是为了让你平静下来。我们绝对不会在 future :)
所以我改变了docker文件。如果我没记错的话 - 使用“docker build”和“docker run”在文章中“手动”运行它,它开始成功。
但是当尝试点击“调试”(或在不调试的情况下启动)时,错误与以前相同。
这是那里提出的 docker 文件(我只将版本更改为 5.0 并将发布更改为仅在项目上运行):
FROM mcr.microsoft.com/dotnet/core/sdk:5.0-buster-slim AS build-env
WORKDIR /app
COPY . ./
RUN dotnet publish "BlazorApp/BlazorApp.csproj" -c Release -o output

FROM nginx:alpine
WORKDIR /var/www/web
COPY --from=build-env /app/output/wwwroot .
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
于是尝试了两次。我还检查了另一个名为 的尖端编排系统。泰 :
https://devblogs.microsoft.com/aspnet/introducing-project-tye/
但它也无法处理 Blazor。
我什至使用 ASP.NET Core 托管选项快速创建了 blazor 应用程序。之后 tye init , tye buildtye run客户端项目没有绑定(bind):
enter image description here
所以也许有人有一些想法,我可以尝试什么?
我想一开始提到的问题是关于编排的。假设我在解决方案中有四个项目 - 例如,Blazor 和三个 webapi`s。如何运行所有内容,以便自动绑定(bind)端点。因为通常我必须为端点添加 url,例如:“https://localhost:5123/api/SomeService”
并且 docker 至少在启动时可以为这些 API 分配不同的端口号 手动更改代码似乎是一件愚蠢的事情。
解决这种情况的最佳方法是什么 - 端点之间有很多通信,我想启动所有这些,它们将自动“连接”(意思是,他们将知道“其他”服务在哪个端口上)?
在此先感谢您对这两个问题的回答

最佳答案

您可以使用 Docker Compose 对于几个应用程序。 YAML文件 docker-compose.yml将引用 Dockerfile对于每个应用程序:

version: '3.4'

services:
webfrontend:
image: ${DOCKER_REGISTRY-}webfrontend
build:
context: .
dockerfile: WebFrontEnd/Dockerfile

mywebapi:
image: ${DOCKER_REGISTRY-}mywebapi
build:
context: .
dockerfile: MyWebAPI/Dockerfile

关于.net - 支持 docker 的 Blazor WebAssembly 应用程序 (linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64829076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com