.Net Core Web Api 这个随机端口分配来自哪里?

Bai*_*ler 5 c# docker

我正在使用 docker-compose 托管使用 .Net Core 模板创建的 .Net Core Web 应用程序。

我的 docker-compose 如下:

version: '3.4'

services:
  db:
    image: mysql:5.7
    container_name: mysql_db
    volumes: 
       - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_HOST: "localhost"
      MYSQL_ROOT_HOST: "%"

  todoservice:
    image: ${DOCKER_REGISTRY}todoservice
    ports: 
      - "8000:80"
    build:
      context: .
      dockerfile: ToDoService/Dockerfile
    depends_on:
      - db

volumes:
  db_data: 
Run Code Online (Sandbox Code Playgroud)

其中我声明我的主机端口 8000 将映射到此 docker 容器上的端口 80。我还有这个 dockerfile 定义了如何构建我的 .Net Core Web Api。

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY ToDoService/ToDoService.csproj ToDoService/
RUN dotnet restore ToDoService/ToDoService.csproj
COPY . .
WORKDIR /src/ToDoService
RUN dotnet build ToDoService.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish ToDoService.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ToDoService.dll"]
Run Code Online (Sandbox Code Playgroud)

运行后docker-compose up -d,我看到我的 ToDoService 列出了 PORTS 的以下信息:

0.0.0.0:8000->80/tcp, 0.0.0.0:32772->80/tcp

那么随机分配的 32772 端口是从哪里来的呢?

小智 0

当我指定 :443 时,它会使用我设置的端口(这里我选择端口为 51836)一致地运行调试(docker compose 设置为 VS)。我还在同一端口上获得了 Swagger 端点:https://localhost:51836/swagger/index.html

我的 docker-compose.yml:

version: '3.4'

services:

  company.api.authservices:
    image: ${DOCKER_REGISTRY-}company-api-auth-services
    build:
      context: .
      dockerfile: Company.Api.AuthServices/Dockerfile
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
    ports:
      - "51830:80"
      - "51836:443"
Run Code Online (Sandbox Code Playgroud)