[英]Docker run command like in Visual Studio
当运行由 Visual Studio 2022 创建的标准 ASP.NET 核心 Web API 项目并启用 docker 选项时,可以使用 https://localhost:65215/swagger/index.88417086467 通过浏览器连接到服务器.
运行指定端口80和443(比如65214和65215)映射的容器时,指定端口无法到达Swagger。 所以显然必须有更多。
如何使用 docker 运行命令从控制台运行 docker 容器? 以及如何设置或至少识别端口?
Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApiContainerized/WebApiContainerized.csproj", "WebApiContainerized/"]
RUN dotnet restore "WebApiContainerized/WebApiContainerized.csproj"
COPY . .
WORKDIR "/src/WebApiContainerized"
RUN dotnet build "WebApiContainerized.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApiContainerized.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApiContainerized.dll"]
程序.cs
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen();
var app = builder.Build();
// Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) {
app.UseSwagger();
app.UseSwaggerUI(); }
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
项目创建
默认情况下,Swagger 仅在您在“开发”环境中运行应用程序时可用。
默认情况下,容器化应用程序在生产环境中运行。
要更改它,请将 ASPNETCORE_ENVIRONMENT 变量设置为“开发”。 您可以在 docker
docker run<\/code>上执行此操作,也可以在 Dockerfile 中进行设置。
至于端口,微软在 aspnet 图像中将 ASPNETCORE_URLS 设置为
http:\/\/+:80<\/code> ,导致应用程序监听 80 端口。
添加一行以将 ASPNETCORE_ENVIRONMENT 设置为您的 Dockerfile,如下所示
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
ENV ASPNETCORE_ENVIRONMENT Development
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["WebApiContainerized/WebApiContainerized.csproj", "WebApiContainerized/"]
RUN dotnet restore "WebApiContainerized/WebApiContainerized.csproj"
COPY . .
WORKDIR "/src/WebApiContainerized"
RUN dotnet build "WebApiContainerized.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApiContainerized.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApiContainerized.dll"]
假设你的代码包含这样的东西......
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
}
... Swagger 仅在由AS.NETCORE_ENVIRONMENT
环境变量控制的开发环境模式下可用。
最简单的方法是将其设置为Development作为run
命令的一部分:
docker run -p 65215:80 -e ASPNETCORE_ENVIRONMENT=Development yourimage:yourtag
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.