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:
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, 5 meses, 4 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