繁体   English   中英

Docker 像在 Visual Studio 中一样运行命令

[英]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();

项目创建

由 Visual Studio 2022 创建的标准 ASP.NET Core Web API

默认情况下,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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM