docker - 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
解决方案
OP 通过 VS 运行应用程序堆栈,并且因为 VS 使用随机端口,它并没有像他想象的那样运行。在适当更改值后从终端运行修复了主要问题
推荐阅读
- python - 如何处理“pandas.read_sql()”方法中时间戳的“越界”错误
- protobuf-java - 方法 emptyIntList() 未定义
- python-3.x - Kamene导致python3分段错误
- r - seqecreate 按字母顺序重新排序事件
- facebook - Facebook 最近登录中断了 OAuth 流程
- function - 最大值:简写函数的参数列表
- ios - 从 VTCompressionOutputCallback 中引用“self”
- r - 如何根据列名分配数据框列类?
- jenkins - 从外部 groovy 文件加载 jenkins 参数
- python - 如何在将 args 解析到测试文件中的情况下运行 pytest?