ASP. NET docker - составить приложение, которое не будет отображаться на назначенном порту - PullRequest
0 голосов
/ 29 апреля 2020

пробираюсь по учебникам по докернизированному веб-шаблону API WeatherForecast из ASP. NET core:

  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. Веб-приложение использует 5000/tcp, 0.0.0.0:32779->80/tcp. Когда я заменяю 5000 на 32779, вместо этого я получаю строку API! Я знаю, что упускаю что-то в docker -композиции и могу использовать некоторые дополнительные глаза на это. Спасибо!

РЕДАКТИРОВАТЬ: Для справки, файлы ниже были сгенерированы моим редактором VSCode. 1. Я запустил do tnet new webapi --no-https 2. Затем я вызвал VSCode «command pallete», запустил Docker: Add Dockerfiles to Workspace и выбрал «yes» для включения файла docker -compose.yml и Linux. Я также решил использовать порт 5000. Я использую Fedora 30. 4. Я запускаю dotnet build из проекта root в терминале. 5. Если я запускаю команды docker и делаю порты явными, он будет работать так, как объявлено, но если я запускаю docker-compose -f <yml-file> up -d- --build, он не будет.

Я просто перечитал это и нахожу это раздражающим, что Я застрял в VSCode, чтобы исправить проблему (в соответствии с документацией)

По умолчанию Docker назначит случайно выбранный порт хоста порту, доступному для контейнера (порт контейнера). В этом случае выставленный (контейнерный) порт равен 5000, но он будет открыт на хосте через случайный порт, например 32737.

Вы можете использовать указанный c порт на хосте, изменив Docker параметры запуска, используемые docker -run: задача отладки (определена в файле .vscode / tasks. json). Например, если вы хотите использовать тот же порт (5000) для предоставления службы, определение задачи отладки docker -run: будет выглядеть так:

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 голосов
/ 29 апреля 2020

Посмотрите docker -составить документы :

SHORT SYNTAX

Либо укажите оба порта (HOST: КОНТЕЙНЕР) или просто порт контейнера (выбран эфемерный хост-порт ).

Так что попробуйте:

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

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