Я бы хотел dockerize простое ASP. net Базовое веб-приложение, в котором размещается REST API с использованием Kestrel.
Как видно из вывода консоли, приложение прекрасно работает, когда я запускаю его на локальном компьютере. Я вижу URL-адреса, по которым оно прослушивается, а также конечную точку, которую я вызвал, чтобы убедиться, что оно работает правильно:
> dotnet DockerTest.dll
> Hosting environment: Production
> Now listening on: https://localhost:5001
> Now listening on: http://localhost:5000
> Application started. Press Ctrl+C to shut down.
> info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
Request starting HTTP/1.1 GET http://localhost:5000/api/values
...
Теперь к части docker:
My Dockerfile довольно просто. Я извлекаю базовый образ ASP. net Core, копирую вывод из dotnet publish "DockerTest.csproj" -c Release -o ./output
и выполняю его так же, как я выполнил его на локальном компьютере:
Dockerfile:
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY ./output .
ENTRYPOINT ["dotnet", "DockerTest.dll"]
После построения изображения с docker build -t dockertest .
я использую привязку порта, а также переменную окружения ASPNETCORE_URLS
, чтобы он работал на http://localhost:5000
, чтобы он походил на мои локальные настройки:
docker run -p 5000:5000 -e ASPNETCORE_URLS="http://localhost:5000" dockertest
Вывод контейнера указывает что приложение прослушивает http://localhost:5000
:
> Hosting environment: Production
> Content root path: C:\app
> Now listening on: http://localhost:5000
> Application started. Press Ctrl+C to shut down.
Но когда я пытаюсь получить доступ к конечной точке, я получаю timeout и контейнер никогда не получает запрос!