Не удалось получить доступ к веб-API внутри контейнера Docker с локального хоста - PullRequest
0 голосов
/ 24 февраля 2019

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

Шаг 1. Я создал проект веб-API .NET Core 2.0 по умолчанию из Visual Studio, здесь ничего особенного, тип вывода установлен на Консольное приложение, запущен OK из сообщества Visual Stuido 2017.

Шаг 2. Я установил последнюю версию DockerПанель инструментов, так как я использую Windows 10 Home Edition, которая также установила Virtual Box.

Шаг 3. Я добавил следующий файл Docker рядом с sln:

    FROM microsoft/aspnetcore-build:2.0

    WORKDIR /app

    EXPOSE 80

    COPY . .

    RUN dotnet restore

    RUN dotnet build

    WORKDIR /app/DockerSample

    ENTRYPOINT dotnet run
  • Далее

Шаг 4. Я успешно собрал образ с помощью команды, подобной 'docker build -t sample1.'

Шаг 5. Контейнер успешно начал работать, он был запущенследующая команда 'docker run -d -p 8080: 80 sample1'

Шаг 6. Извлечь информацию о контейнере с помощью команды docker logs c6 Была показана следующая информация:

enter image description here

Интересным является адрес, по которому служба прослушивает, похоже, он совпадает с адресом, который я получал при запуске службы непосредственно из Visual Studio.

Это служебный адрес виртуальной машины, которая работает внутри Virtual Box?Почему порт не 8080 или 80, как я упоминал в команде «run»?

Контейнер выглядит нормально, что-то вроде:

enter image description here

Шаг 7.

Теперь начинается забавная попытка запустить службу с компьютера с Windows 10, это было невозможно при использовании вызовов типа http://localhost:8080/values/api Я также пытался использовать вызовы типа http://192.168.99.100:8080/values/api, где 192.168.99.100 - это адрес док-машины по умолчанию.

Я также попробовал что-то вроде 'http://172.17.0.2:8080/values/api', где IP-адрес был получен после вызова типа' docker inspect a2 ', изменение порта на 80 не помогло :).Попытка изменить номер порта на 80 или 58954, тот, который показан красным как прослушивание, не помог.Также был остановлен брандмауэр Windows или любые другие брандмауэры.

Я попытался перенести порт с VirtualBox, имея что-то вроде

enter image description here

Попытка изменитьпорты 80 и 8080 между ними для хоста и гостя также не работали.

По сути, ни одно из предложенных мной решений не дало мне возможности подключиться к сервису с моего компьютера с Windows.

В основном я следовал этому уроку https://www.stevejgordon.co.uk/docker-for-dotnet-developers-part-2, который довольно хорошо объясняетЧто нужно сделать только для того, чтобы в какой-то момент использовать Docker Desktop для Windows, чтобы Docker Toolbox остался позади.

Знаете ли вы, что мне следует сделать, чтобы я мог запустить службу из контейнера Docker?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Для вашей проблемы это вызвано тем, что вы запускаете контейнер в среде Development, которая не использовала порт 80 для приложения.

Для FROM microsoft/aspnetcore-build:2.0, кажется, вы не могли изменить ASPNETCORE_ENVIRONMENT на Production.

Для решения проблемы вы можете изменить файл Docker, как показано ниже, который изменит базовый образ с помощью microsoft/aspnetcore:2.0.

FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY ["TestAPI/TestAPI.csproj", "TestAPI/"]
RUN dotnet restore "TestAPI/TestAPI.csproj"
COPY . .
WORKDIR "/src/TestAPI"
RUN dotnet build "TestAPI.csproj" -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "TestAPI.dll"]
0 голосов
/ 24 февраля 2019

В docker compose (интеграция визуальной студии добавляет docker "docker-compose.yml") установите это значение:

version: '3.4'
   services:
      webapi.someapi:
        image: ${DOCKER_REGISTRY-}somenamesomeapi
        build:
          context: .
          dockerfile: ../webapi/Dockerfile
        environment:
          - ASPNETCORE_URLS=https://+:443;http://+:80
          - ASPNETCORE_HTTPS_PORT=443
        ports:
          - "80:80"
          - "443:443"

в настройках ланча укажите, что приложение должно запускаться на портах 80 и 443 https

Docker для визуального кода студии: https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker

Выполните следующие шаги для организации ваших контейнеров: https://marketplace.visualstudio.com/items?itemName=PeterJausovec.vscode-docker

...