如何在容器中 运行 .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 添加 Dockerfile
到 foo
文件夹:
# 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 页面,但我什么也没看到:
我还尝试做什么:
- 在 6 我尝试将命令更改为
docker run -d -p 8080:5062
- 我检查了启动应用程序的控制台,由于某些原因,它指的是第 80 个端口:
{"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 扩展方法。
如何在容器中 运行 .NET Web API?
这是我所做的:
1 创建了一个 foo
文件夹。
2 在文件夹中,我打开了一个终端并 运行 命令 dotnet new webapi
。然后我 运行 dotnet run
并验证 swagger 可以通过浏览器访问。
3 添加 Dockerfile
到 foo
文件夹:
# 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 页面,但我什么也没看到:
我还尝试做什么:
- 在 6 我尝试将命令更改为
docker run -d -p 8080:5062
- 我检查了启动应用程序的控制台,由于某些原因,它指的是第 80 个端口:
{"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 扩展方法。