【问题标题】:.netcore microservices on Docker System.Net.Http.HttpRequestException: Cannot assign requested addressDocker System.Net.Http.HttpRequestException 上的 .netcore 微服务:无法分配请求的地址
【发布时间】:2020-06-21 20:11:02
【问题描述】:

我有三个服务,一个是我的本地身份服务(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 compose:

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"

我尝试做this 并在我的身份验证承载选项中将权限指定为环境变量 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。如果在浏览器上请求知名的,一切都很好。服务间,不起作用,但又只能在开发中的本地机器上工作。

【问题讨论】:

  • 请分享至少一个Dockerfile?我对 .NET Core 自定义 Dockerfile 有一些惊喜,这使得调试非常棘手。

标签: docker asp.net-core .net-core docker-compose identityserver4


【解决方案1】:

在 docker 上使用 IdentityServer 时,您应该注意 https 证书,您的服务无法验证 https 证书。

无法从以下位置获取配置:“[PII 已隐藏]”。 ---> System.IO.IOException:IDX20804:

如果您尝试获取 IdentityServer 配置,您将无法获取。 调用此地址并查看结果: https://auth.service/.well-known/openid-configuration

【讨论】:

  • 这就是事情:众所周知的作品。它仅在 docker 上运行 IS 时有效。当使用 docker compose 并且其他服务尝试与 IS 交互时,它不起作用。它也适用于不同的环境。仅在本地主机上不起作用。
  • 您需要在任何客户端上验证您的证书如何调用 IS,无效证书是 docker 环境中的常见问题。将 PII 设置为 true 并查看更多详细信息。
猜你喜欢
  • 1970-01-01
  • 2021-11-03
  • 2018-07-16
  • 1970-01-01
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 2021-05-19
  • 1970-01-01
相关资源
最近更新 更多