Я создаю микросервисы, используя docker и asp.net core 2. Я создал 2 микросервиса и веб-api. Я пытаюсь вызвать конечную точку микросервиса из веб-API с помощью HttpClient. Ниже приведен код контроллера веб-API.
[HttpGet]
public async Task<IEnumerable<string>> GetAsync()
{
var client = new HttpClient();
var data = await client.GetAsync("http://localhost:8081/api/values");
return new string[] { "apigateway-value1", "apigateway-value2" };
}
Это мой файл docker-compose.yml, в котором указан микросервис, который я пытаюсь вызвать.
microserviceone:
image: ${DOCKER_REGISTRY}microserviceone
build:
context: .
dockerfile: MicroserviceOne/Dockerfile
ports:
- "8082:80"
Это Dockerfile микросервиса
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY MicroserviceOne/MicroserviceOne.csproj MicroserviceOne/
RUN dotnet restore MicroserviceOne/MicroserviceOne.csproj
COPY . .
WORKDIR /src/MicroserviceOne
RUN dotnet build MicroserviceOne.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish MicroserviceOne.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "MicroserviceOne.dll"]
Проблема в том, что я получаю сообщение об ошибке «System.Net.Http.CurlException: не удалось подключиться к серверу». Из командной строки, если я попытаюсь получить доступ к той же конечной точке с помощью команды
curl -X GET -H Content-Type: application/json http://localhost:808/api/values
Я получаю данные. Я действительно не знаю, что происходит.


Вы можете попробовать использовать hostname / ipaddress вместо localhost. «Localhost» представляет текущий контейнер.
В вашем случае вы можете использовать команду docker run с «-p», чтобы связать порт контейнера с портом на хосте. Приведенная ниже команда использует порт 5003 хоста и привязывается к порту 80 контейнера с именем «myaspapp», на котором запущено ваше основное приложение asp.net.
docker run -p 5003:80 myaspapp
Затем вы можете открыть приложение в браузере с помощью URL-адреса https: // локальный: 50003, а также использовать curl.
Можете сослаться на это - Создайте первое приложение ASP.NET Core в контейнере Docker