Me confundí un poco con Linux docker y cosmos db emulator. Tengo un emulador instalado en mi máquina local. En mi Windows 10, tengo un contenedor docker de Linux con la aplicación principal Web API ASP.NET. Cuando trato de obtener acceso desde el contenedor a cosmos db, obtengo una excepción -> HttpRequestException: Conexión rechazada.
En el código C# obtengo las opciones necesarias como AuthKey y Uri para la base de datos de las variables de entorno. Parece que tengo un problema con la red entre el contenedor y el host local, pero no puedo entender cómo puedo conectarlos.
A continuación se proporcionan los archivos docker-compose.yml y 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:roNo puede acceder al host vm desde el contenedor docker dentro configurando https://127.0.0.1:8081 directamente.
Consulte este documento e intente configurar host.docker.internal:8081 para acceder al host vm.
El host tiene una dirección IP cambiante (o ninguna si no tiene acceso a la red). Desde el 18.03 en adelante, nuestra recomendación es conectarse al nombre de DNS especial host.docker.internal, que se resuelve en la dirección IP interna utilizada por el host. Esto es para fines de desarrollo y no funcionará en un entorno de producción fuera de Docker Desktop para Windows.
El emulador Cosmos DB necesita un certificado SSL instalado, según este enlace . Para el tiempo de ejecución de .net, puede acceder al certificado directamente desde el Almacén de certificados de Windows.
Sin embargo, ejecuta el código .net en la imagen de la ventana acoplable de Linux. Entonces, mi idea es exportar el certificado SSL siguiendo estos pasos .
Guárdelo en la ruta específica en los directorios del host y del host de montaje. Consulte esta guía .