在 Docker 中运行 Blazor

Mit*_*ins 6 c# asp.net-core blazor

我已经使用 Visual Studio 2019(预览版)创建了我的第一个 Blazor 测试。回购在这里。当我在 VS 中点击 IISExpress 按钮时,一切都按预期工作。

但是,我想将我的应用程序部署到 Ubuntu/Dokku 服务器。因此,我一直试图弄清楚如何使用 Docker 设置我的服务器。到目前为止,这是我在 Dockerfile 中的内容:

# Latest .NET Core from https://hub.docker.com/_/microsoft-dotnet-core-sdk/ (not the nightly one)
FROM mcr.microsoft.com/dotnet/core/sdk:3.0.100-preview6-disco AS build-env
WORKDIR /app
# Copy everything and build
COPY . ./
RUN dotnet restore "./HollyTest.Server/HollyTest.Server.csproj"
RUN dotnet publish "./HollyTest.Server/HollyTest.Server.csproj" -c Release -o out

# Latest ASP.NET Core from https://hub.docker.com/_/microsoft-dotnet-core-aspnet/ (not the nightly one)
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0.0-preview6-disco
ENV ASPNETCORE_URLS=http://+:5000
EXPOSE 5000
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "HollyTest.Server.dll"]
Run Code Online (Sandbox Code Playgroud)

应用程序编译并运行服务器,但每次我点击服务器时我都会收到 404。所以我在本地机器上运行了上述命令:

cd app
dotnet restore .\HollyTest.Server\HollyTest.Server.csproj
dotnet publish "./HollyTest.Server/HollyTest.Server.csproj" -c Release -o out
cd out
dotnet .\HollyTest.Server.dll
Run Code Online (Sandbox Code Playgroud)

然后当我运行时,curl localhost:5000我看到以下内容:

Hosting environment: Production
Content root path: C:\Users\hmurphy\Documents\GitHub\app\out
Now listening on: http://localhost:5000
Now listening on: https://localhost:5001
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://localhost:5000/
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'Fallback {*path:nonfile}'
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'Fallback {*path:nonfile}'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 223.05540000000002ms 404
Application is shutting down...
Run Code Online (Sandbox Code Playgroud)

在Visual Studio生成的日志中,看起来更健康:

Hosting environment: Development
Content root path: C:\Users\hmurphy\Documents\GitHub\HollyTest\HollyTest.Server
Now listening on: http://localhost:50873
Application started. Press Ctrl+C to shut down.
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
      Request starting HTTP/1.1 GET http://localhost:50873/
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[0]
      Executing endpoint 'Fallback {*path:nonfile}'
info: Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware[6]
      The file /index.html was not modified
info: Microsoft.AspNetCore.Routing.EndpointMiddleware[1]
      Executed endpoint 'Fallback {*path:nonfile}'
info: Microsoft.AspNetCore.Hosting.Diagnostics[2]
      Request finished in 326.5401ms 304 text/html
info: Microsoft.AspNetCore.Hosting.Diagnostics[1]
.
.
.
Run Code Online (Sandbox Code Playgroud)

我假设我缺少某种配置/缺少步骤。它与“内容根路径”有关吗?在./out文件夹中,没有HollyTest.Server文件夹。

我对 ASP.NET Core(或 .NET 中的现代 Web 开发)没有太多经验。任何人都可以帮助我并指出正确的方向吗?

cod*_*ion 5

.NET Core Preview 6 ( https://github.com/aspnet/AspNetCore/issues/11636 ) 和 ( https://github.com/aspnet/AspNetCore/issues/11185 ) 上的Balzor 存在众所周知的问题

要么等待 Preview 7,要么添加到 Dockerfile

# After publish
COPY out/wwwroot/_content/hollytestclient out/wwwroot/
Run Code Online (Sandbox Code Playgroud)

然后运行 docker run -p 8081:5000 -it holly_test:latest