如何在容器中 运行 .NET Web API?

How can I run a .NET Web API in a container?

如何在容器中 运行 .NET Web API?

这是我所做的:

1 创建了一个 foo 文件夹。

2 在文件夹中,我打开了一个终端并 运行 命令 dotnet new webapi。然后我 运行 dotnet run 并验证 swagger 可以通过浏览器访问。

3 添加 Dockerfilefoo 文件夹:

# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY ./ ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:6.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "foo.dll"]

4 执行了 docker build -t aspnetapp . 命令。

5 转到 Properties/launchSettings.json 并找到了 profiles.foo.applicationUrl 的值(我在 2 中通过浏览器访问 swagger 使用该值来验证应用程序是否正常工作)。值为 https://localhost:7055;http://localhost:5062:

6 执行了 docker run -d -p 8080:7055 命令。

7 现在我转到浏览器 https://localhost:8080/swagger 并希望看到 swagger 页面,但我什么也没看到:

我还尝试做什么:

{"EventId":14,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Now listening on: http://[::]:80","State":{"Message":"Now listening on: http://[::]:80","address":"http://[::]:80","{OriginalFormat}":"Now listening on: {address}"}}

{"EventId":0,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Application started. Press Ctrl\u002BC to shut down.","State":{"Message":"Application started. Press Ctrl\u002BC to shut down.","{OriginalFormat}":"Application started. Press Ctrl\u002BC to shut down."}}

{"EventId":0,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Hosting environment: Production","State":{"Message":"Hosting environment: Production","envName":"Production","{OriginalFormat}":"Hosting environment: {envName}"}}

{"EventId":0,"LogLevel":"Information","Category":"Microsoft.Hosting.Lifetime","Message":"Content root path: /app/","State":{"Message":"Content root path: /app/","contentRoot":"/app/","{OriginalFormat}":"Content root path: {contentRoot}"}}

如何让容器中的应用 运行ning 可以通过我的浏览器访问? IE。如何通过浏览器查看 swagger 和调用端点?

根据您的 docker 日志信息,"Message":"Now listening on: http://[::]:80" 您的 Web 应用程序公开的端口是来自容器的 80

所以我想你可以尝试用它来映射。

docker run -d -p 8080:80

我们可以使用下面的方法来更改使用端口Endpoint configuration,否则可能会使用默认端口。

  • ASPNETCORE_URLS 环境变量。
  • --urls command-line 参数。
  • urls 主机配置键。
  • UseUrls 扩展方法。