. NET Базовый API: «локальный хост отказался подключаться» при запуске через Docker - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь запустить простой веб-интерфейс через docker.

Я выполнил все шаги, упомянутые в документах .

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Снимок экрана:

enter image description here enter image description here

Команды, которые я использую для запуска API через docker:

docker build -t aspnetapp .
docker run -d -p 8080:80 --name myapp aspnetapp

Обратите внимание, что API работает, когда я выполняю следующие команды в командной строке, поэтому, скорее всего, ничего не поменяется с сам API:

dotnet publish -c Release -o out
dotnet run out/ApiForDocker.dll

РЕДАКТИРОВАТЬ:

enter image description here

launchSettings

{
  "$schema": "http://json.schemastore.org/launchsettings.json",
  "iisSettings": {
    "windowsAuthentication": false, 
    "anonymousAuthentication": true, 
    "iisExpress": {
      "applicationUrl": "http://localhost:63852",
      "sslPort": 44318
    }
  },
  "profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "ApiForDocker": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/values",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

1 Ответ

0 голосов
/ 27 марта 2020

Это выглядит правильно для меня.

Полезным вариантом отладки является добавление RUN ls -al к шагу времени выполнения, чтобы убедиться, что вы нацеливаетесь на правильную запись app-name.dll.

# Build runtime image
FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
RUN ls -al
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

Затем ищите вывод во время сборки. Или вы можете s sh в контейнер running , чтобы проверить это.

$ docker exec -it container-id bash.

Кроме того, вы всегда можете попробовать переключиться на другой порт в Properties > launchSettings.json, а затем обновить точку входа Dockerfile с этим портом и --urls -args, например:

ENTRYPOINT ["dotnet", "aspnetapp.dll", "--urls", "http://*:6001"]

Затем вам также необходимо сопоставить этот порт на хост-компьютере -p 8080:6001. Также убедитесь, что ваш контейнер также прослушивает этот интерфейс (0.0.0.0).

Обновление

Теперь, когда вы указали параметры запуска:

"ApiForDocker": {
  "commandName": "Project",
  "launchBrowser": true,
  "launchUrl": "api/values",
  "applicationUrl": "https://localhost:5001;http://localhost:5000",
  "environmentVariables": {
    "ASPNETCORE_ENVIRONMENT": "Development"
  }
}

Вы можете обновить точку входа docker на:

ENTRYPOINT ["dotnet", "aspnetapp.dll", "--urls", "http://*:5000"]

и сопоставить контейнер на хост-компьютере с помощью -p 5000:5000, а затем localhost:5000/api/values даст вам API ПОЛУЧИТЕ ответ на этот маршрут в вашем браузере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...