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

Access to Cosmos db emulator on local machine from Linux docker

我有点混淆 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

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

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

The host has a changing IP address (or none if you have no network access). From 18.03 onwards our recommendation is to connect to the special DNS name host.docker.internal, which resolves to the internal IP address used by the host. This is for development purpose and will not work in a production environment outside of Docker Desktop for Windows.


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

但是,您 运行 linux docker image.So 中的 .net 代码我的想法是按照这些 steps.[=17 导出 SSL 证书=]

保存在宿主机和挂载宿主机的具体路径下directories.Please参考这个guide.