从Linux docker访问本地计算机上的Cosmos db模拟器

时间:2019-07-02 22:26:59

标签: docker asp.net-web-api docker-compose azure-cosmosdb docker-for-windows

我对Linux docker和cosmos db模拟器有点困惑。我在本地计算机上安装了模拟器。在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

1 个答案:

答案 0 :(得分:1)

您无法通过直接设置https://127.0.0.1:8081从docker容器内部访问vm host。

请参考此document,并尝试将host.docker.internal:8081设置为访问VM主机。

  

主机的IP地址正在更改(如果您没有网络,则没有IP地址)   访问)。从18.03开始,我们的建议是连接到   特殊的DNS名称host.docker.internal,解析为内部   主机使用的IP地址。这是出于发展目的,将   在Docker Desktop以外的生产环境中无法运行   Windows。


根据此link,Cosmos DB仿真器需要安装SSL证书。对于.net运行时,您可以直接从Windows证书存储区访问证书。

但是,您在linux docker映像中运行.net代码。所以我的想法是按照这些steps导出SSL证书。

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