簡體   English   中英

具有 docker 支持的 Blazor WebAssembly 應用程序 (linux)

[英]Blazor WebAssembly App with docker support (linux)

今天我有一個問題,這是其中一個問題,你一直想知道但你總是害怕問;) 但是這個問題也與 BlazorWebAssembly 應用程序 docker 支持相關。 所以也許我會描述我做了什么。

所以我確實想玩一點尖端 blazor,當然還有 .NET 5.0(我最后一個“尖端技術”是 ASP.NET MVC - 所以是的,已經有一段時間了:))

一開始我不太清楚那些與 Blazor 相關的選項是做什么用的。 所以我選擇了:

在此處輸入圖片說明

您可以發現,“啟用 Docker 支持”選項是灰色的。 所以就像“docker支持問題預覽”:)

我不知道什么選項:“ASP.NET Core 托管”代表,所以我沒有使用它(這是一個錯誤)一旦您選中此選項,它將創建一個服務器應用程序,一個客戶端(Blazor)一個和一個共享(這是為了他們之間的模型目的)

我不知道,所以我必須添加我自己的 WebApi 項目和模型的一些項目:)

現在,下一步是添加 docker 支持(令人驚訝的是這是可能的)

在此處輸入圖片說明

這創建了一個 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

開頭的一些有趣事實(文章中的引用)

注意:我想這個復選框將在未來某個時候啟用

所以伙計們,只是為了讓你平靜下來。 我們絕對不在未來:)

所以我改變了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

所以兩次嘗試。 我還檢查了另一個名為tye 的尖端編排東西:

https://devblogs.microsoft.com/aspnet/introducing-project-tye/

但它也不能處理 Blazor。

我什至快速創建了帶有 ASP.NET Core 托管選項的 blazor 應用程序。 tye inittye buildtye run之后,客戶端項目沒有綁定:

在此處輸入圖片說明

所以也許有人有一些想法,我可以嘗試什么?

我想一開始提到的問題是關於編排的。 假設我在解決方案中有四個項目 - 例如 Blazor 和三個 webapi。 如何運行一切以便它自動綁定端點。 因為通常我必須為端點添加網址,例如:“https://localhost:5123/api/SomeService”

並且 docker 至少在啟動時可以為這些 API 分配不同的端口號手動更改代碼似乎是一件愚蠢的事情。

解決這種情況的最佳方法是什么 - 端點之間有很多 o 通信,我想啟動所有這些,它們將自動“連接”(意思是,它們將知道“其他”服務在哪個端口上) )?

預先感謝您對這兩個問題的回答

您可以將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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM