Tengo una API central 2.2 de asp.net implementada. He creado una imagen acoplable. Me gustaría anular las cadenas de conexión en el archivo appsettings.json.
¿Hay alguna forma de hacerlo? Intenté a través de variables de entorno cuando inicio el contenedor con el comando docker container run -e "ConnectionStrings:DefaultConnection={...here goes the connection string}"
También tengo builder.AddEnvironmentVariables();
en mi Startup.cs pero la cadena de conexión en mi appsetting.json no se reemplaza.
Lo verifiqué dentro del contenedor, appsetting.json está allí pero los valores no se reemplazan.
¿Alguna otra forma de cómo hacer estos casos? Gracias.
Para -e
, anulará el entorno del sistema que cambiará la cadena de conexión cuando lo recupere del código, no afectará el contenido de appsettings.json
.
Por ejemplo
Suponga que tiene un appsettings.json
como
{ "ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true" }, "Logging": { "LogLevel": { "Default": "Warning" } }, "AllowedHosts": "*" }
Recupere la cadena de conexión mediante _configuration.GetConnectionString("DefaultConnection")
como
public class HomeController : Controller { private readonly IConfiguration _configuration; public HomeController(IConfiguration configuration) { _configuration = configuration; } public IActionResult Index() { return Ok(_configuration.GetConnectionString("DefaultConnection")); //return View(); } }
Para docker run -it -p 8888:80 dockerconfiguration
, devolverá "Server=(localdb)\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true"
para Acción de índice
Para docker run -it -p 8888:80 dockerconfiguration -e "ConnectionStrings:DefaultConnection"="testsqlstring"
, devolverá testsqlstring
Por lo tanto, si solo desea anular el valor en appsettings.json
durante el tiempo de ejecución, solo necesita especificar como el Paso 4
Si prefiere cambiar el archivo appsettings.json en el contenedor docker, puede seguir los pasos a continuación
vi
con apt-get install vim -y
docker exec -it 43ea835776dd /bin/bash
para ir al contenedorls
para enumerar los archivos y busque appsettings.json
vi appsettings.json
para modificar el contenido.cat appsettings.json
para verificar si el contenido ha cambiadoexit
y acceda a Home/Index
para verificar el resultado.appsetting.json nunca se cambia, sin embargo, según la jerarquía, los valores de las variables se anulan. Eche un vistazo a los ejemplos en https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#conventions . Funciona bastante bien. Quizás solo para asegurarse de que no rompió algo debido a la ejecución de la línea de comandos, puede intentar asignar variables de entorno a través de docker-compose. La regla general es que el patrón que usa para la "clave" debe coincidir (con la ayuda de __
en lugar de :
con lo que tiene en el archivo json, para que se anule.
Probé sin las comillas para la sección ConnectionStrings y funcionó (en una consola de PowerShell.
docker run -d -p 8080:80 --name letscosmosweb -e ConnectionStrings__ProductsDbContext=$key letscosmosweb:v1
La variable $key
contiene la cadena de conexión