我对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
答案 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。