Ядро asp.net переопределяет строки подключения через переменные ENV - PullRequest
1 голос
/ 05 июня 2019

У меня реализовано API 2.2 ядра asp.net.Я создал образ докера.Я хочу переопределить строки подключения в файле appsettings.json.

Есть ли способ сделать это?Я пробовал через переменные окружения, когда я запускаю контейнер с командой docker container run -e "ConnectionStrings:DefaultConnection={...here goes the connection string}"

У меня также есть builder.AddEnvironmentVariables(); в моем Startup.cs, но строка подключения в моем appsetting.json не заменяется.

Я проверил это внутри контейнера, appsetting.json есть, но значения не заменяются.

Любой другой способ, как сделать такие случаи?Thx.

Ответы [ 2 ]

1 голос
/ 05 июня 2019

appsetting.json никогда не изменяется, однако в зависимости от иерархии значения переменных переопределяются.Посмотрите на примеры на https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-2.2#conventions.Это работает довольно хорошо.Возможно, просто чтобы быть уверенным, что вы ничего не сломали из-за выполнения командной строки, вы можете попытаться назначить переменные окружения с помощью docker-compose.Практическое правило заключается в том, что шаблон, который вы используете для «ключа», должен совпадать (с помощью __ вместо :) с тем, что имеется в файле json, чтобы он был переопределен.

0 голосов
/ 06 июня 2019

Для -e это переопределит системную среду, которая изменит строку соединения при извлечении из кода, это не повлияет на содержимое в appsettings.json.

Например,

  1. Предположим, у вас есть appsettings.json как

    {
        "ConnectionStrings": {
            "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true"
        },
        "Logging": {
            "LogLevel": {
            "Default": "Warning"
            }
        },
        "AllowedHosts": "*"
    }
    
  2. Извлечь строку соединения с помощью _configuration.GetConnectionString("DefaultConnection")как

    public class HomeController : Controller
    {
        private readonly IConfiguration _configuration;
        public HomeController(IConfiguration configuration)
        {
            _configuration = configuration;
        }
        public IActionResult Index()
        {
            return Ok(_configuration.GetConnectionString("DefaultConnection"));
            //return View();
        }
    }
    
  3. Для docker run -it -p 8888:80 dockerconfiguration возвращается "Server=(localdb)\\mssqllocaldb;Database=aspnet-TestDockerConfiguration-416C6FD2-3531-42D6-9EDE-18AC45901208;Trusted_Connection=True;MultipleActiveResultSets=true" Для действия индекса

  4. Для docker run -it -p 8888:80 dockerconfiguration -e "ConnectionStrings:DefaultConnection"="testsqlstring" возвращаетсяtestsqlstring

  5. Итак, если вы хотите переопределить значение в appsettings.json во время выполнения, вам просто нужно указать как Шаг 4

Если вы предпочитаете изменить файл appsettings.json в Docker-контейнере, вы можете выполнить следующие шаги:

  1. Установить команду vi с помощью apt-get install vim -y
  2. Выполнить docker exec -it 43ea835776dd /bin/bash, чтобы перейтив контейнер
  3. Запустите ls для просмотра списка файлов и найдите appsettings.json
  4. Запустите vi appsettings.json, чтобы изменить содержимое
  5. Выполните cat appsettings.json, чтобы проверить, является ли содержимоеизменено
  6. Запустите exit и получите доступ к Home/Index, чтобы проверить результат.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...