ASP.NET docker-compose应用程序未在分配的端口上显示

时间:2020-04-29 02:30:38

标签: c# asp.net docker .net-core docker-compose

按照我的方式逐步完成有关dockerized ASP.NET核心的API WeatherForecast Web模板的教程:

  1. https://code.visualstudio.com/docs/containers/quickstart-aspnet-core
  2. https://code.visualstudio.com/docs/containers/docker-compose

我必须从这里开始,因为我无法使用此处的教程https://docs.docker.com/compose/aspnet-mssql-compose/

来构建新图像

“ 1”有效,很棒。但是,“ 2”将无法像宣传的那样在localhost:5000/WeatherForecast端口上工作,并且在对可用文档进行了多次审查之后,调试为什么会遇到一些麻烦。

我应该注意一点,在从命令行创建模板化应用程序时,我确实选择了--no-https选项。

然后我使用docker ps调出PORTS。该Web应用程序正在使用5000/tcp, 0.0.0.0:32779->80/tcp。当用5000代替32779时,我得到的是返回的API字符串! 我知道我在docker-compose中丢失了一些东西,可能需要多加注意。谢谢!

编辑:供参考,以下文件是由我的VSCode编辑器生成的。 1.我运行了dotnet新的webapi --no-https 2.然后,我调出VSCode“ command Palette”并运行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:debug任务(在.vscode / tasks.json文件中定义)使用的Docker运行选项来使用主机上的特定端口。例如,如果要使用相同的端口(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"]

1 个答案:

答案 0 :(得分:1)

看看docker-compose docs

简短语法

要么指定两个端口(HOST:CONTAINER),要么仅指定容器端口(选择临时主机端口)。

所以尝试:

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

  # e.g.
  # - "5000:80"
  # - "44388:443"