首页 > 解决方案 > ASP NET Core App Docker 容器在两个不同的端口中打开

问题描述

我在 docker 容器中运行的应用程序可以通过两个不同的端口号访问,当应用程序启动时,它会在一个偶然的端口号中打开,但是可以通过 docker compose 中配置的端口号访问同一个应用程序。谁能解释我发生了什么事?

https://localhost:63060/ -> VS 打开应用程序时定义的 Aleatory 端口 https://localhost:44349/ -> 根据 docker compose 正确的一个

码头工人撰写

version: '3.5'

services:
  documentmanager:
    image: ${DOCKER_REGISTRY-}documentmanager
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://localhost;http://localhost
      - ASPNETCORE_HTTPS_PORT=44349   
      # Do not create development certificate in an environment that will be distributed.
      #- DOTNET_GENERATE_ASPNET_CERTIFICATE=false
    networks:
      - doc_manager
    ports:
      - "51218:80"
      - "44349:443"
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets/:/root/.microsoft/usersecrets
      - ${APPDATA}/ASP.NET/Https/:/root/.aspnet/https/
    build:
      context: .
      dockerfile: Document Manager/Dockerfile
  documentuploader:
    image: ${DOCKER_REGISTRY-}documentuploader
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://localhost;http://localhost
      - ASPNETCORE_HTTPS_PORT=44335
      # Do not create development certificate in an environment that will be distributed.
      #- DOTNET_GENERATE_ASPNET_CERTIFICATE=false
    networks:
      - doc_manager
    ports:
      - "51217:80"
      - "44335:443"
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets/:/root/.microsoft/usersecrets
      - ${APPDATA}/ASP.NET/Https/:/root/.aspnet/https/
    build:
      context: .
      dockerfile: DocumentUploader/Dockerfile

networks:
  doc_manager:
    name: doc_manager
    driver: bridge

码头工人文件

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build
WORKDIR /src
COPY ["Unistad Document Manager/Unistad Document Manager.csproj", "Unistad Document Manager/"]
COPY ["StorageLibrary/StorageLibrary.csproj", "StorageLibrary/"]
COPY ["ConfigurationLibrary/ConfigurationLibrary.csproj", "ConfigurationLibrary/"]
RUN dotnet restore "Unistad Document Manager/Unistad Document Manager.csproj"
COPY . .
WORKDIR "/src/Unistad Document Manager"
RUN dotnet build "Unistad Document Manager.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "Unistad Document Manager.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "Unistad Document Manager.dll"]

我的 docker ps 结果

NAMES                PORTS
Document_Manager     0.0.0.0:51218->80/tcp, :::51218->80/tcp, 0.0.0.0:63060->443/tcp
DocumentUploader     0.0.0.0:51217->80/tcp, :::51217->80/tcp, 0.0.0.0:44335->443/tcp, :::44335->443/tcp

标签: docker.net-coredocker-compose

解决方案


OP 通过 VS 运行应用程序堆栈,并且因为 VS 使用随机端口,它并没有像他想象的那样运行。在适当更改值后从终端运行修复了主要问题


推荐阅读