Как проложить базовый путь к ASP.NET Основная служба API в контейнере Docker на хосте Linux

#asp.net #linux #docker

#asp.net #linux #docker

Вопрос:

У нас есть служба API .NET Core 3.1, развернутая на сервере Windows 2019 с именем devweb. Служба выполняется в IIS в виртуальном каталоге / OnPrem.

У нас также есть обратный прокси, который проверяет подлинность запросов, таких как ourproxy/MyApp/OnPrem/api/mydata/1 и пересылает запрос devweb/OnPrem/api/mydata/1 .

Я хочу переместить эту локальную службу API в контейнер Docker, чтобы мы могли разместить ее в Linux box. Я упаковал службу API как независимый от платформы контейнер .NET Core Docker, который предоставляет порты 80 и 443. Вызовы службы в контейнере Docker работают корректно. Например, URL MyDevPC/api/mydata/1 возвращает правильные данные.

Моя проблема: наша реализация прокси отправляет /OnPrem базовый URL-адрес хосту. Я могу настроить контейнер как есть для обработки host/api/mydata/1 , но мне нужно, чтобы хост мог обрабатывать URL host/OnPrem/api/mydata/1 -адрес и направлять этот запрос в контейнер Docker. В Windows IIS это можно сделать, настроив приложение в виртуальном каталоге с путем /OnPrem . Я новичок в контейнерах Docker и Linux, поэтому я не уверен, какие у меня есть варианты на хосте Linux с сервисом в контейнере Docker.

Как бы я мог создать эквивалент виртуального каталога IIS на хосте Linux с контейнером Docker?

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

Комментарии:

1. Что касается вашего контейнера Docker, будет ли он находиться в контейнере Windows (и, следовательно, использовать IIS внутри) или это будет контейнер Linux (и, следовательно, ожидается, что он будет работать с чем-то вроде Nginx)?

2. @mason Контейнер Docker будет размещен на сервере Linux. Не уверен, какой дистрибутив наша команда DevOps использовала для этого, но я могу узнать, если необходимо. Сам контейнер в настоящее время основан на aspnet: 3.1-buster-slim, который является .NET Core 3.1 в дистрибутиве Linux Debian.

3. Также обратите внимание, что мой опыт работы с Linux минимален. Я динозавр Windows. (Слава богу, что есть Интернет!)

4. Лучшая практика Microsoft — поместить что-то перед вашим хостом Linux ASP.NET Основные приложения, такие как Nginx или Apache. Вероятно, вы можете сделать то, что хотите, с помощью Nginx или Apache (вы также можете проверить другие инструменты, такие как Traefik или Envoy ). Я думаю, что конкретная реализация будет зависеть от инструмента, который вы используете для создания своего приложения. Конечно, у меня нет большого опыта хостинга ASP.NET Ядро в Docker, так что я могу быть совершенно неправ.