Docker 运行 命令如 Visual Studio
Docker run command like in Visual Studio
当运行使用 ASP.NET Core Web API 由 Visual Studio 2022 创建并启用 docker 选项的项目时,通过浏览器连接到服务器可以通过使用 https://localhost:65215/swagger/index.html (它甚至自己弹出)。
当运行通过指定端口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"]
Program.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();
项目创建
默认情况下,只有当您在 'development' 环境中 运行 您的应用时,Swagger 才可用。
默认情况下,容器化应用 运行 正在生产中。
要更改它,请将 ASPNETCORE_ENVIRONMENT 变量设置为 'Development'。您可以在 docker run
上执行此操作,也可以在 Dockerfile 中进行设置。
至于端口,Microsoft 在 aspnet 图像中将 ASPNETCORE_URLS 设置为 http://+:80
,导致应用程序在端口 80 上侦听。
像这样向您的 Dockerfile 添加一行以设置 ASPNETCORE_ENVIRONMENT
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"]
使用
构建并运行
docker build -t myimage .
docker run -d -p 65214:80 myimage
您现在应该可以通过 http://localhost:65214/swagger 访问 Swagger 页面
假设您的代码包含类似这样的内容...
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
}
... Swagger 仅在由 ASPNETCORE_ENVIRONMENT
环境变量控制的开发环境模式下可用。
最简单的方法是将其设置为 开发 作为 run
命令的一部分:
docker run -p 65215:80 -e ASPNETCORE_ENVIRONMENT=Development yourimage:yourtag
当运行使用 ASP.NET Core Web API 由 Visual Studio 2022 创建并启用 docker 选项的项目时,通过浏览器连接到服务器可以通过使用 https://localhost:65215/swagger/index.html (它甚至自己弹出)。
当运行通过指定端口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"]
Program.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();
项目创建
默认情况下,只有当您在 'development' 环境中 运行 您的应用时,Swagger 才可用。
默认情况下,容器化应用 运行 正在生产中。
要更改它,请将 ASPNETCORE_ENVIRONMENT 变量设置为 'Development'。您可以在 docker run
上执行此操作,也可以在 Dockerfile 中进行设置。
至于端口,Microsoft 在 aspnet 图像中将 ASPNETCORE_URLS 设置为 http://+:80
,导致应用程序在端口 80 上侦听。
像这样向您的 Dockerfile 添加一行以设置 ASPNETCORE_ENVIRONMENT
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"]
使用
构建并运行docker build -t myimage .
docker run -d -p 65214:80 myimage
您现在应该可以通过 http://localhost:65214/swagger 访问 Swagger 页面
假设您的代码包含类似这样的内容...
if (app.Environment.IsDevelopment())
{
app.UseSwagger();
}
... Swagger 仅在由 ASPNETCORE_ENVIRONMENT
环境变量控制的开发环境模式下可用。
最简单的方法是将其设置为 开发 作为 run
命令的一部分:
docker run -p 65215:80 -e ASPNETCORE_ENVIRONMENT=Development yourimage:yourtag