Контейнерное приложение ASP.NET Core Docker недоступно - PullRequest
0 голосов
/ 23 июня 2019

Я запускаю службу ASP.NET Core в контейнере Docker на MacOS.
Visual Studio для Mac v18.1.2 (сборка 2) .NET Core SDK: 2.2.300

Вот файл Docker:

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

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
WORKDIR /
COPY src/Services/Service.API/Service.API.csproj src/Services/Service.API/
RUN dotnet restore src/Services/Service.API/Service.API.csproj
COPY . .
WORKDIR /src/Services/Service.API
RUN dotnet build Service.API.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish Service.API.csproj -c Release -o /app

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

Вот как выглядит файл docker-compose для сервиса:

service.api:
  build:
    context: .
    dockerfile: src/Services/Service.API/Dockerfile
  environment:
    - ASPNETCORE_ENVIRONMENT=Development
    - ASPNETCORE_URLS=http://+:80;https://+:443
    - ASPNETCORE_HTTPS_PORT=5254 
    - ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword
    - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
  ports:
    - "5204:80"
    - "5254:443"
  volumes:
    - ${HOME}/.aspnet/https:/https/

Порты работающего контейнера Docker тоже хорошо выглядят:

0.0.0.0: 5204-> 80 / tcp, 0.0.0.0:5254->443/tcp

Но когда я пытаюсь позвонить https://localhost:5254, он говорит, что сайт не может быть достигнут.

Также в выводе я вижу следующее предупреждение:

предупреждение: Microsoft.AspNetCore.Server.Kestrel [0] Невозможно выполнить привязку к https://localhost:5001 в интерфейсе обратной связи IPv6: «Невозможно назначить запрошенный адрес». Microsoft.AspNetCore.Server.Kestrel: Предупреждение: невозможно привязать к https://localhost:5001 в интерфейсе обратной связи IPv6: «Невозможно назначить» запрашиваемый адрес ». Хостинг-среда: Разработка контента root path: / app Сейчас слушает: https://localhost:5001

Почему он не принимает URL-адреса, заданные переменной enivronment ASPNETCORE_URLS?

Что еще можно сделать для устранения неполадок, чтобы найти проблему?

Ответы [ 4 ]

0 голосов
/ 25 июня 2019

Оказывается, это ошибка в Visual Studio для Mac v18.1.2 (docker-compose up работает)

0 голосов
/ 24 июня 2019

У меня была ваша проблема некоторое время назад, вот как я ее исправил. Вам нужно указать --server.urls в качестве рабочего аргумента, как показано ниже:

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "Service.API.dll", "--server.urls", "http://+:80;https://+:443"]

А откуда взялись эти 5000 и 5001?

Конфигурация конечной точки Kestrel

По умолчанию ядро ​​ASP.NET связывается с:

http://localhost:5000

https://localhost:5001 (при местном развитии сертификат есть)

Обновление 1:

В соответствии с вашей конфигурацией docker-compose вы установили для ASPNETCORE_ENVIRONMENT значение Development. Я думаю, вы должны изменить его на Production, потому что при включении Development ASP.NET Core будет считывать настройки с launchSettings.json.

Среда разработки может включать функции, которые не должны предоставляться в производство. Например, шаблоны ASP.NET Core включают страницу исключений разработчика в среде разработки.

Среду для разработки локальной машины можно настроить в Свойства \ launchSettings.json файл проекта. Ценности окружающей среды установить в launchSettings.json значения переопределения, установленные в системе окружающая среда.

Насколько я помню, портами по умолчанию для Kestrel являются 80 и 443 в каждом значении по умолчанию launchSettings.json.

Если вам нужно запустить свой проект в режиме development на Docker, вам следует изменить конфигурацию внутри launchSettings.json, но я думаю, что это не рекомендуется, и лучше изменить режим на Production.

service.api:
  build:
    context: .
    dockerfile: src/Services/Service.API/Dockerfile
  environment:
    - ASPNETCORE_ENVIRONMENT=Production
    - ASPNETCORE_URLS=http://+:80;https://+:443
    - ASPNETCORE_HTTPS_PORT=5254 
    - ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword
    - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
  ports:
    - "5204:80"
    - "5254:443"
  volumes:
    - ${HOME}/.aspnet/https:/https/
0 голосов
/ 24 июня 2019

Для вашего текущего docker-compose.yml вы ссылаетесь на существующее изображение service.api:${TAG:-latest} напрямую, а не используете сгенерированное изображение из файла dockerfile.

Удалить эту строку image: service.api:${TAG:-latest}

version: '3'
services:
  service.api:
  build:
    context: .
    dockerfile: src/Services/Service.API/Dockerfile
  environment:
    - ASPNETCORE_ENVIRONMENT=Development
    - ASPNETCORE_URLS=http://+:80;https://+:443
    - ASPNETCORE_HTTPS_PORT=5254 
    - ASPNETCORE_Kestrel__Certificates__Default__Password=crypticpassword
    - ASPNETCORE_Kestrel__Certificates__Default__Path=/https/aspnetapp.pfx
  ports:
    - "5204:80"
    - "5254:443"
  volumes:
    - ${HOME}/.aspnet/https:/https/
0 голосов
/ 23 июня 2019

Сначала проверьте, работает ли ваш контейнер с:

docker ps

Если он работает, Kestrel внутри контейнера не может быть запущен. Возможно, вам придется проверить вашу точку входа, Linux в контейнере чувствительна к регистру. В этом случае попробуйте запустить приложение вручную. Сначала залезайте в контейнер:

docker exec -it your_container /bin/bash

cd /app

dotnet yourprojectfile.dll

и затем перейдите:

https://localhost:5254

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...