Cómo variable volumen de referencia y entorno con docker en núcleo de red Api

En realidad en mi Apigateway con núcleo neto tengo la siguiente estructura de carpeta:

enter image description here

En Program.cs necesito referenciar la configuración del archivo como _pathConfigOcelot:

public static void Main(string[] args)
    {
        string _pathConfigOcelot = Environment.GetEnvironmentVariable("OcelotConfigPath");
        CreateHostBuilder(args, _pathConfigOcelot).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args, string pathConfigOcelot) =>
        Host.CreateDefaultBuilder(args)
           .ConfigureAppConfiguration(
                      ic => ic.AddJsonFile(Path.Combine(pathConfigOcelot,
                                                        "configuration.json")))
            .ConfigureWebHostDefaults(webBuilder => 
            {
                webBuilder.UseStartup();
            });

En realidad uso docker-compose para volúmenes de uso:

services: 
  tresfilos.webapigateway:
  image: ${DOCKER_REGISTRY-}tresfilosapigateway
  build: 
    context: .
    dockerfile: tresfilos.ApiGateway/ApiGw-Base/Dockerfile
  environment: 
   - ASPNETCORE_ENVIRONMENT=Development
   - IdentityUrl=http://identity-api
  ports:
   - "7000:80"
   - "7001:443"
  volumes:
   - ./tresfilos.ApiGateway/Web.Bff:/app/configuration

No sé cómo utilizar el volumen del docker como referencia para la configuración. Js en el proyecto, ¿alguna idea?

Pregunta hecha hace 3 años, 4 meses, 27 días - Por quantumquasar


3 Respuestas:

  • Leí esto. ./tresfilos.ApiGateway/Web.Bff:/app/configuration como /app/configuration es el alias de ./tresfilos.ApiGateway/Web.Bff dentro de mi aplicación.

    Así que diría que usted referencia el archivo como /app/configuration/configuration.json

    Actualización:

    Agregar / después de la Web.Bff podría ayudar.

    Respondida el Dec 18, 2020 a las 18:27 - por bytebard30f9

    Votos positivos: 0 | Votos negativos: 0

  • Para utilizar el volumen de Docker como referencia para la configuración en tu proyecto de núcleo neto con Apigateway, puedes hacer lo siguiente:

    • Asegúrate de que el volumen de Docker esté configurado correctamente en tu archivo `docker-compose.yml`. En este caso, el volumen que quieres utilizar es `./tresfilos.ApiGateway/Web.Bff:/app/configuration`, lo que significa que el directorio local `./tresfilos.ApiGateway/Web.Bff` se mapeará al directorio `/app/configuration` en el contenedor.

    • En tu código C

      , puedes acceder a la configuración desde el directorio asignado al volumen de Docker. En este caso, puedes modificar tu código de la siguiente manera para cargar la configuración desde el directorio /app/configuration en el contenedor:

    csharp
    public static void Main(string[] args)
    {
        string pathConfigOcelot = "/app/configuration";
        CreateHostBuilder(args, pathConfigOcelot).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args, string pathConfigOcelot) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration( ic => ic.AddJsonFile(Path.Combine(pathConfigOcelot, "configuration.json"))) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); });

    De esta manera, al ejecutar tu contenedor Docker, la configuración del archivo configuration.json se cargará desde el directorio /app/configuration en el contenedor, que está mapeado al directorio local ./tresfilos.ApiGateway/Web.Bff.

    Espero que esta solución te ayude a resolver tu problema. ¡Déjame saber si tienes alguna otra pregunta!

    Respondida el Dec 19, 2020 a las 18:23 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Para utilizar el volumen de Docker como referencia para la configuración de "configuration.js" en el proyecto, debes montar el volumen en el directorio donde se espera que esté el archivo de configuración.

    En tu caso, el volumen se monta en /app/configuration dentro del contenedor. Entonces, para referenciar la configuración de "configuration.js", puedes utilizar la siguiente ruta:

    
    /app/configuration/configuration.js
    

    Asegúrate de que la ruta sea correcta y que el archivo de configuración esté disponible en esa ubicación dentro del contenedor.

    También debes asegurarte de que el usuario que ejecuta el contenedor tenga permisos de lectura para acceder al archivo de configuración.

    Aquí tienes un ejemplo actualizado de tu código de "Program.cs":

    
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.Hosting;
    
    public static void Main(string[] args)
    {
        var host = CreateHostBuilder(args).Build();
        host.Run();
    }
    
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((context, config) =>
            {
                config.AddJsonFile("/app/configuration/configuration.js", optional: false, reloadOnChange: true);
            })
            .ConfigureWebHostDefaults(webBuilder =>
            {
                webBuilder.UseStartup();
            });
    

    Ten en cuenta que he eliminado la variable de entorno OcelotConfigPath ya que no es necesaria cuando se monta el volumen directamente en el directorio de configuración.

    Respondida el Dec 19, 2020 a las 18:29 - por Gemini

    Votos positivos: 0 | Votos negativos: 0