.netcore microservices on Docker System. Net .Http.HttpRequestException: Невозможно назначить запрошенный адрес - PullRequest
0 голосов
/ 10 марта 2020

У меня есть три службы, одна из них - моя локальная служба идентификации (IS), а две другие - это .netcore 2.2 webapis. Я использую IS в качестве промежуточного программного обеспечения для аутентификации, и две службы должны проходить аутентификацию на IS. Все работает гладко, когда я размещаю свои приложения на IIS, например. Когда я пытаюсь сделать то же самое с docker и docker, compose вещь больше не работает, и у меня появляется следующая ошибка:

Невозможно получить конфигурацию из: '[PII скрыт] ». ---> System.IO.IOException: IDX20804: невозможно получить документ из: '[PII скрыт]'. ---> System. Net .Http.HttpRequestException: Невозможно назначить запрошенный адрес ---> System. Net .Sockets.SocketException: Невозможно назначить запрошенный адрес

Я вставляю docker составьте здесь:

services:
  management:
    image: ${DOCKER_REGISTRY-}management
    build:
      context: .
      dockerfile: src/Management/Dockerfile
    depends_on: 
      - auth.service

  auth.service:
    image: ${DOCKER_REGISTRY-}authservice
    build:
      context: .
      dockerfile: src/Authorization/Auth.Service/Dockerfile
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro

  management2:
    image: ${DOCKER_REGISTRY-}management2
    build:
      context: .
      dockerfile: src/Management2/Dockerfile
    depends_on: 
      - auth.service

и docker -compose.override.yml

version: "3.4"

services:
 management:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - auth.service=http://auth.service:80
      - ASPNETCORE_URLS=http://0.0.0.0:80
    ports:
      - "58101:80"

  auth.service:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://0.0.0.0:80
      - ASPNETCORE_HTTPS_PORT=5000

    ports:
      - "5001:80"
      - "5000:443"
    volumes:
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro

  management2:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - auth.service=http://auth.service:80
      - ASPNETCORE_URLS=http://0.0.0.0:80

    ports:
      - "58102:80"

Я попытался сделать это и указать в своих опциях носителя аутентификации авторитет как переменная среды auth.service. Не сработало.

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src

COPY  Infrastructure Infrastructure
COPY  Authorization Authorization
COPY  Users Users

RUN dotnet restore "Authorization/Auth.Service/Auth.Service.csproj"

WORKDIR /src/Authorization/Auth.Service
RUN dotnet build -c Release -o /app

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

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
RUN ls -ltr /app
ENTRYPOINT ["dotnet", "Auth.Service.dll"]

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

1 Ответ

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

При использовании IdentityServer на docker вы должны знать о сертификате https, поскольку ваши службы не могут проверить сертификат https.

Невозможно получить конфигурацию из: '[PII скрыт]'. ---> System.IO.IOException: IDX20804:

Если вы попытаетесь получить конфигурации IdentityServer, вы не сможете. позвоните по этому адресу и посмотрите результат: https://auth.service/.well-known/openid-configuration

...