从Linux docker访问本地计算机上的Cosmos db emulator

从Linux docker访问本地计算机上的Cosmos db emulator,docker,asp.net-web-api,docker-compose,azure-cosmosdb,docker-for-windows,Docker,Asp.net Web Api,Docker Compose,Azure Cosmosdb,Docker For Windows,我对Linux docker和cosmos db emulator有点困惑。我在本地机器上安装了一个模拟器。在我的Windows 10上,我有一个带有Web API ASP.NET核心应用程序的Linux docker容器。当我试图从容器访问cosmos db时,我得到一个异常->HttpRequestException:连接被拒绝 在C#代码中,我从环境变量中获得所需的选项,如AuthKey和数据库Uri。看起来我在容器和本地主机之间的网络上有问题,但我不明白如何连接它们 下面提供了docke

我对Linux docker和cosmos db emulator有点困惑。我在本地机器上安装了一个模拟器。在我的Windows 10上,我有一个带有Web API ASP.NET核心应用程序的Linux docker容器。当我试图从容器访问cosmos db时,我得到一个异常->HttpRequestException:连接被拒绝

在C#代码中,我从环境变量中获得所需的选项,如AuthKey和数据库Uri。看起来我在容器和本地主机之间的网络上有问题,但我不明白如何连接它们

下面提供了docker-compose.yml和docker-compose.override.yml文件

event.webapi:
    container_name: event.webapi
    image: '${DOCKER_REGISTRY-}eventwebapi'
    environment:
     **- AzureCollectionName=Events
     - AzureDatabaseName=EventsDatabase**
    build:
      context: .
      dockerfile: src/Services/Event/Event.WebApi/Dockerfile

``` docker-compose.override.yml
event.webapi:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - ASPNETCORE_URLS=https://+:443;http://+:80
      - ASPNETCORE_HTTPS_PORT=44378
      **- AzureEndpointUri=https://127.0.0.1:8081
      -AzurePrimaryKey=C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==**
    ports:
      - "53753:80"
      - "44378:443"
    volumes:
      - ${APPDATA}/Microsoft/UserSecrets:/root/.microsoft/usersecrets:ro
      - ${APPDATA}/ASP.NET/Https:/root/.aspnet/https:ro

通过设置
https://127.0.0.1:8081
直接输入

请参考此内容,并尝试设置
host.docker.internal:8081
以访问vm主机

主机的IP地址正在更改(如果没有网络,则无IP地址) 访问权限)。从18.03起,我们建议连接到 特殊DNS名称host.docker.internal,解析为内部 主机使用的IP地址。这是为了发展的目的和意愿 无法在Docker Desktop之外的生产环境中工作 窗户


根据本文,Cosmos DB emulator需要安装SSL证书。对于.net运行时,您可以直接从Windows证书存储访问证书

但是,您在LinuxDocker映像中运行.net代码,所以我的想法是按照以下步骤导出SSL证书


将其保存在主机和装载主机目录上的特定路径中。请参阅此项。

这可能会有所帮助,谢谢您的帮助。提供的信息帮助了我。但是在我从更改为之后,我得到了这样一个异常:“SSL连接无法建立,请参阅内部异常。-->System.Security.Authentication.AuthenticationException:根据验证过程,远程证书无效。”非常感谢提供的信息。这对我真的很有帮助。也许你知道我如何使用生成的证书?我有documentdbemulatorcert.cer文件。我在主机和容器之间共享了卷,但我不知道如何使用此证书。您能帮我回答这个问题吗?@mVadim-有任何更新吗?沿着这条路走似乎是正确的,但是由于export.cer是针对
localhost
,因此它不会针对
host.docker.internal
进行验证。