Как написать файл docker для использования переменной окружения PORT в Azure Службе приложений - PullRequest
0 голосов
/ 12 февраля 2020

Я узнаю больше о Azure, контейнерах, службах приложений и интеграции VNet (предварительный просмотр).

Я могу успешно развернуть мой do tnet core (3.1) API напрямую на Azure Служба приложений (Linux разновидность) и настройка соответствующей интеграции VNet, которая позволяет API получать доступ к предварительному адресу 192.168 .., пока API общедоступен.

Я хотел бы развернуть код в виде Docker образа в реестре контейнеров Azure, а затем развернуть образ контейнера в службе приложений и использовать ту же интеграцию VNet.

Когда я делаю это, контейнерная версия службы приложений не достигает того же адреса 192.168 .., что служба прямой связи с приложением.

Azure сообщает мне, что более подробную информацию по этому вопросу можно найти здесь: https://github.com/Azure/app-service-linux-docs/blob/master/app_service_linux_vnet_integration.md

Прямой по этой ссылке :

Linux Служба приложений VNet Интеграция Azure Интеграция виртуальной сети (VNet) для Linux Веб-приложение в настоящее время находится в режиме предварительного просмотра. Клиенты могут использовать функцию VNet для разработки и тестирования интеграции с вашими веб-приложениями. Пожалуйста, не используйте эту функцию в производственных целях. Узнайте, как настроить VNet с вашим веб-приложением.

Во время предварительного просмотра вам нужно будет изменить приложение для интеграции с VNet. Это временное ограничение при выпуске VNet Preview, мы удалим ограничение до GA. В вашем приложении используйте переменную среды PORT в качестве порта прослушивания основного веб-сервера, а не используйте номер порта в жестком коде. Переменная среды PORT автоматически устанавливается платформой службы приложений во время запуска. Например, для приложения Node.js Express в вашем сервере должен быть следующий код. js file. Полный пример можно найти на Github.

app.listen(process.env.PORT);

ASPNETCORE_URLS - это рекомендуемый способ настройки ASP. NET Core docker образа, а вот пример DockerFile.

Примечание. Мы постоянно совершенствуем эту функцию VNet Предварительный просмотр интеграции для Linux веб-приложения, и в ближайшие несколько месяцев мы представим улучшения этой функции.

Короче говоря, я должен применить небольшой обходной путь, пока VNet находится в режиме предварительного просмотра.

На странице есть ссылка на DockerFile, который, очевидно, может использоваться для основных приложений tnet. https://github.com/dotnet/dotnet-docker/blob/7c18c117d9bd2d35e30cdb4a1548ac14b9f0f037/3.0/aspnetcore-runtime/nanoserver-1809/amd64/Dockerfile

Если я возьму копию этого DockerFile, мое приложение больше не будет компилировать с ошибками вокруг escape-символа. Если я удаляю их, я получаю другие сообщения об ошибках, в которых многие команды неизвестны.

Моя проблема в том, что я не до конца понимаю, как заставить это работать.

Что я должен включить в мои приложения DockerFile (моя версия ниже), чтобы убедиться, что контейнерная версия приложения правильно настроена для использования этого обходного пути?

Мой текущий DockerFile (файл по умолчанию docker для API в Visual Studio). Единственное, что я здесь изменил, была версия Windows, на которую была нацелена.

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.


FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

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

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

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

Ответы [ 2 ]

2 голосов
/ 21 марта 2020

Чтобы настроить порт прослушивания на ENV PORT во время docker сборки. Команда ENTRYPOINT в Dockerfile выглядит следующим образом:

ENTRYPOINT "dotnet" "Tutorial.WebApi.dll" --urls="http://0.0.0.0:${PORT:-80}"

Более подробное описание проблемы с VNet см. В моем полном ответе здесь

0 голосов
/ 13 февраля 2020

Согласно сообщению, вам не нужно ничего менять в вашем Dockerfile, чтобы все было в порядке. Переменная среды PORT работает только в веб-приложении Azure, интегрируемом с Vnet, и используется в коде приложения, когда вы хотите прослушивать порт, а не в Dockerfile.

Что вам нужно сделать используйте подходящее базовое изображение, создайте его с помощью Dockerfile, а затем протестируйте его, пока он не будет работать локально Затем измените порт прослушивания с помощью переменной среды PORT в вашем приложении на используемый вами язык.

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