Контейнер Docker ASP.NET Core 8.0 не назначает переменную порта среды ASPNETCORE_URLS

Я пытаюсь настроить свой ASP.NET Core 8.0 Web API для работы с Heroku с помощью контейнера Docker.

И на Heroku, и на Docker это не работает, и я не могу понять, почему.

Однако когда я запускаю его вне докера и локально на своем компьютере, он работает localhost:5000. Кто-нибудь может мне помочь?

Это мой Dockerfile:

FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["Onitama.Api/Onitama.Api.csproj", "Onitama.Api/"]
COPY ["Onitama.Core/Onitama.Core.csproj", "Onitama.Core/"]
COPY ["Onitama.Bootstrapper/Onitama.Bootstrapper.csproj", "Onitama.Bootstrapper/"]
COPY ["Onitama.Infrastructure/Onitama.Infrastructure.csproj","Onitama.Infrastructure/"]
RUN dotnet restore "Onitama.Api/Onitama.Api.csproj"
COPY . .
WORKDIR "/src/Onitama.Api"
RUN dotnet build "Onitama.Api.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "Onitama.Api.csproj" -c $BUILD_CONFIGURATION -o /app/publish

FROM base AS final

WORKDIR /app
COPY --from=publish /app/publish .

CMD ASPNETCORE_URLS=http://+:$PORT dotnet Onitama.Api.dll

Консоль:

Контейнер Docker ASP.NET Core 8.0 не назначает переменную порта среды ASPNETCORE_URLS

Как вы можете видеть, CMD правильно распознает переменную среды $PORT, но на самом деле не может работать на этом порту...

Контейнер Docker ASP.NET Core 8.0 не назначает переменную порта среды ASPNETCORE_URLS

Контейнер Docker ASP.NET Core 8.0 не назначает переменную порта среды ASPNETCORE_URLS

Контейнер Docker ASP.NET Core 8.0 не назначает переменную порта среды ASPNETCORE_URLS

Есть ли у кого-нибудь идеи, что происходит?

Обновлено:

Я удалил точку входа, как предложено ниже, и получаю следующее:

2024-05-23T20:42:57.675131+00:00 app[web.1]: warn: Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[3]

2024-05-23T20:42:57.675135+00:00 app[web.1]:       Failed to determine the https port for redirect.

РЕШЕНО: Удалив точку входа в файле Dockerfile и отключив перенаправление https в моем приложении asp net, я смог заставить все работать! Кажется, что браузер по-прежнему использует https, потому что на Heroku включена автоматическая аутентификация SSL, которая, как я предполагаю, делает всю работу за меня.

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Пожалуйста, не размещайте изображения текста. Вставьте текст в свое сообщение и используйте инструменты форматирования, чтобы отделить содержимое файла от текста. Мне бы очень хотелось показать вам работающий Dockerfile, но я не собираюсь вводить весь этот текст вручную.

Ваша проблема в том, что ENTRYPOINT и CMD объединяются в одну команду при запуске вашего контейнера. В конечном итоге ваша программа запускается без оболочки, как указано в ENTRYPOINT. Затем ваш CMD передается в вашу программу в качестве параметров. Ваша программа, вероятно, не ожидает параметров, поэтому просто игнорирует их.

Чтобы это исправить, удалите оператор ENTRYPOINT. Тогда ваш CMD будет запущен в оболочке, как вы и ожидаете, и будет установлена ​​переменная среды.

Аааа! Спасибо за ответ, и прошу прощения. Я обязательно отредактирую и использую код в сообщении.

billion 23.05.2024 23:08

Просто вопрос... После изменения Dockerfile, как было предложено, на этот раз он, похоже, действительно запустился. За исключением того, что теперь я получаю следующее, что не совсем понимаю (отредактированное сообщение более понятно): Microsoft.AspNetCore.HttpsPolicy.HttpsRedirectionMiddleware[‌​3] Не удалось определить порт https для перенаправления. Есть идеи, в чем может быть проблема? Спасибо за предыдущий ответ :)

billion 23.05.2024 23:15

Ваш ASPNETCORE_URLS указывает только порт HTTP, поэтому, если вы настроили ASP для перенаправления на HTTPS, он не сможет найти порт. Если вам не нужен HTTPS, вы можете удалить UseHttpsRedirection в своей программе.

Hans Kilian 23.05.2024 23:50

Другие вопросы по теме