Я новичок в докере и очень хочу испытать его возможности.
Здесь я хотел бы запустить (разместить) простой веб-API ядра Asp.net в Docker (используя docker run
) вместо того, чтобы запускать его с помощью IIS
.
Это просто, потому что это точно стандартный базовый веб-API ASP.NET проекта auto-gen с одним контроллером с именем ValuesController
. Обычно при отладке с помощью IISExpress следующий URI должен отвечать массиву значений:
http://localhost:[some_port]/api/values
Теперь я добавляю поддержку Docker для проекта (используя контейнер Windows). После сборки докера у меня есть изображение, которое можно перечислить с помощью docker images
.
Теперь я запускаю докер для размещения моего веб-API следующим образом:
docker run -t -rm -p 80:50633 hellodocker:dev
Он работает нормально, и я могу проверить это, используя docker ps
.
Однако, чтобы проверить, действительно ли он работает, я попытался ввести следующий адрес в браузере:
http://localhost/api/values
и он не работает, ничего не отображается и выглядит как несуществующий сайт.
Когда я пытаюсь выполнить следующую команду docker exec [container_id] netstat
, она иногда показывает запись со статусом TIME_WAIT
, и почти всегда ее нет. Хотя я не уверен, относится ли это к внешнему прослушиванию.
вот содержимое файла dockerfile:
FROM microsoft/dotnet:2.2-aspnetcore-runtime-nanoserver-1803 AS base
WORKDIR /app
EXPOSE 50633
EXPOSE 44322
FROM microsoft/dotnet:2.2-sdk-nanoserver-1803 AS build
WORKDIR /src
COPY HelloDocker/HelloDocker.csproj HelloDocker/
RUN dotnet restore HelloDocker/HelloDocker.csproj
COPY . .
WORKDIR /src/HelloDocker
RUN dotnet build HelloDocker.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish HelloDocker.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "HelloDocker.dll"]
Я действительно застрял в этом. Приложение hello-world может просто распечатать простую строку, но этот hellodocker
должен быть размещен в докере и обслуживать любые HTTP-запросы так же, как когда мы размещаем его в IIS.
Возможно, у вас нет решения, но, пожалуйста, дайте мне несколько советов, чтобы помочь диагностировать эту проблему. Спасибо!
UPDATE
После попытки удалить встроенный образ и восстановить вместо него другой. Выглядит иначе после запуска той же командой docker run
, указанной выше:
Hosting environment: Production
Content root path: C:\app
Now listening on: http://[::]:80
Application started. Press Ctrl+C to shut down.
Как и прежде ничего не отображается, и путь к корню приглашения становится C:\app
.
Так что на этот раз выглядит более очевидно, что он слушает запросы Однако это все еще не работает: (