ASP.NET docker-compose应用程序在分配的端口上不出现。

问题描述 投票:0回答:1

我的工作方式通过教程docker化的API WeatherForecast从ASP.NET核心的Web模板。

  1. https:/code.visualstudio.comdocscontainersquickstart-aspnet-core。
  2. https:/code.visualstudio.comdocscontainersdocker-compose。

我必须从这里开始,因为我没有得到一个新的图像来构建使用这里的教程。https:/docs.docker.comcomposeaspnet-mssql-compose。

"1 "可行,这很好。然而,"2 "在以下情况下不起作用: localhost:5000/WeatherForecast 移植,而我在查阅了许多可用的文档之后,在调试时遇到了一些麻烦。

我需要说明的是,在命令行创建templated应用时,我确实选择了--no-https选项。

然后我用docker ps调出了PORTS 。Web应用程序使用的是 5000/tcp, 0.0.0.0:32779->80/tcp . 当我代替 5000 对于 32779 ,我得到的是返回的API字符串!我知道我在docker-compose中遗漏了一些东西,可以使用一些额外的眼睛。谢谢你

EDIT:作为参考,下面的文件是由我的VSCode编辑器生成的.1.我运行dotnet new webapi --no-https2。然后我调出VSCode的 "命令托盘",并运行 Docker: Add Dockerfiles to Workspace 并选择了'是'来包含docker-compose.yml文件和Linux。我也选择使用端口 5000. 我使用Fedora 30.4。我运行 dotnet build 5.如果我从终端的项目根目录下运行。docker 命令,并使端口显式化,它就会像广告中说的那样工作,但如果我运行 docker-compose -f <yml-file> up -d- --build但它不会。

我刚刚重新阅读了这篇文章,发现我被困在VSCode中无法解决这个问题,这让我很恼火(根据文档)。

默认情况下,Docker会将随机选择的主机端口分配给容器暴露的端口(容器端口)。在这种情况下,暴露的(容器)端口是5000,但它将通过一个随机的端口,如32737,在主机上暴露。

你可以通过改变docker-run使用的Docker运行选项:debug任务(在.vscodetasks.json文件中定义),在主机上使用特定的端口。例如,如果你想使用相同的端口(5000)来暴露服务,docker-run:debug任务的定义就会像这样。

a. Dockerfile

    # Please refer https://aka.ms/HTTPSinContainer on how to setup an 
    https developer certificate for your ASP .NET Core service.
    version: '3.4'

    services:
      aspdotnetdocker2:
        image: aspdotnetdocker2
        build:
          context: .
          dockerfile: Dockerfile
        ports:
          - 5000

b. docker-compose.yml

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 5000

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["aspdotnet_docker2.csproj", "./"]
RUN dotnet restore "./aspdotnet_docker2.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "aspdotnet_docker2.csproj" -c Release -o /app/build

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "aspdotnet_docker2.dll"]
c# asp.net docker .net-core docker-compose
1个回答
0
投票

请看一下 docker-compose docs:

简称:SHORT SYNTAX

可以指定两个端口(HOST:CONTAINER),也可以只指定集装箱端口(一个是 永久主机端口 是选择的)。)

所以试一试。

ports:
  - "5000:<port in ASPNETCORE_URLS>"

  # e.g.
  # - "5000:80"
  # - "44388:443"
© www.soinside.com 2019 - 2024. All rights reserved.