пробираюсь по учебникам по докернизированному веб-шаблону API WeatherForecast из ASP. NET core:
- https://code.visualstudio.com/docs/containers/quickstart-aspnet-core
- https://code.visualstudio.com/docs/containers/docker-compose
Я должен был начать отсюда, потому что я не получал новое изображение для построения с помощью учебника здесь: https://docs.docker.com/compose/aspnet-mssql-compose/
«1» работает, и это здорово. Тем не менее, «2» не будет работать на порту localhost:5000/WeatherForecast
, как объявлено, и у меня возникли некоторые проблемы с отладкой, почему после многих проверок доступных документов.
Я должен отметить, что при создании шаблонов приложение из командной строки, я выбрал опцию --no-https.
Затем я использовал docker ps, чтобы вызвать PORTS. Веб-приложение использует 5000/tcp, 0.0.0.0:32779->80/tcp
. Когда я заменяю 5000
на 32779
, вместо этого я получаю строку API! Я знаю, что упускаю что-то в docker -композиции и могу использовать некоторые дополнительные глаза на это. Спасибо!
РЕДАКТИРОВАТЬ: Для справки, файлы ниже были сгенерированы моим редактором VSCode. 1. Я запустил do tnet new webapi --no-https 2. Затем я вызвал VSCode «command pallete», запустил Docker: Add Dockerfiles to Workspace
и выбрал «yes» для включения файла docker -compose.yml и Linux. Я также решил использовать порт 5000
. Я использую Fedora 30. 4. Я запускаю dotnet build
из проекта root в терминале. 5. Если я запускаю команды docker
и делаю порты явными, он будет работать так, как объявлено, но если я запускаю docker-compose -f <yml-file> up -d- --build
, он не будет.
Я просто перечитал это и нахожу это раздражающим, что Я застрял в VSCode, чтобы исправить проблему (в соответствии с документацией)
По умолчанию Docker назначит случайно выбранный порт хоста порту, доступному для контейнера (порт контейнера). В этом случае выставленный (контейнерный) порт равен 5000, но он будет открыт на хосте через случайный порт, например 32737.
Вы можете использовать указанный c порт на хосте, изменив Docker параметры запуска, используемые docker -run: задача отладки (определена в файле .vscode / tasks. json). Например, если вы хотите использовать тот же порт (5000) для предоставления службы, определение задачи отладки docker -run: будет выглядеть так:
a. Dockerfile
# Please refer https://aka.ms/HTTPSinContainer on how to setup an
https developer certificate for your ASP .NET Core service.
version: '3.4'
services:
aspdotnetdocker2:
image: aspdotnetdocker2
build:
context: .
dockerfile: Dockerfile
ports:
- 5000
b. docker-compose.yml
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 5000
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["aspdotnet_docker2.csproj", "./"]
RUN dotnet restore "./aspdotnet_docker2.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "aspdotnet_docker2.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "aspdotnet_docker2.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "aspdotnet_docker2.dll"]