Параметр тома запуска Docker Укажите --help для списка доступных опций и команд - PullRequest
0 голосов
/ 04 февраля 2019

. Консольное приложение ядра .Net считывает конфигурационный файл на главном, как показано ниже.

static void Main(string[] args)
{

     var configBuilder = new ConfigurationBuilder()
                      .AddJsonFile("//home/processorconfig/appsettings.json");

     var configuration = configBuilder.Build();
     ...
}

Когда я запускаю образ докера с параметром -v

docker run -v C:\Configs\:/home/processorconfig/ -it  858a565b2069

, вывод:

Укажите --help для списка доступных опций и команд.

Когда я изменяю только букву в параметре тома, он запускает контейнер, но приложение получает исключение

docker run -v C:\Configs\:/home/processorconfg/ -it  858a565b2069

Вывод:

Необработанное исключение: System.IO.FileNotFoundException: файл конфигурации 'processorconfig / appsettings.json' не найден и не является обязательным.Физический путь - «/home/processorconfig/appsettings.json».в Microsoft.Extensions.Configuration.FileConfigurationProvider.Load (логическая перезагрузка) в Microsoft.Extensions.Configuration.ConfigurationRoot..ctor (поставщики IList`1) в Microsoft.Extensions.Configuration.ConfigurationBuilder.Build ()

Когда я меняю путь к консольному приложению AddJsonFile на другой, а затем добавляю том к пути при запуске, я получаю тот же вывод.

Любая помощь приветствуется.

Тот же результат с --mount параметр

Обновление: обнаружил подсказку, что когда я удаляю appsetings.json в C: \ Configs, он запускает контейнер и получает сообщение об исключении.

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Двоеточие в пути может быть проблематичным.Я не на машине Windows, поэтому не могу проверить.Попробуйте использовать синтаксис --mount:

docker run --mount type=bind,source=C:\Configs\,target=/home/processorconfig/ -it  858a565b2069
0 голосов
/ 06 февраля 2019

Возможно, проблема связана с тем, что просмотр файловой системы не работает с подключенными томами в Docker.(Подробная информация о aspnet GitHub и Docker Forum ).

Чтение файла с помощью команды File.ReadAllText и передачи строки в InMemoryFileProvider спасло мой день.

var jsonString = File.ReadAllText("//home/processorconfig/appsettings.json");
var memoryFileProvider = new InMemoryFileProvider(jsonString);
var configuration = new ConfigurationBuilder()
    .AddJsonFile(memoryFileProvider, "appsettings.json", false, false)
    .Build();
0 голосов
/ 04 февраля 2019

Попробуйте, например, из каталога, который вы хотите сопоставить с контейнером:

docker run -v $(pwd):/home/processorconfig/ -it  858a565b2069

Это позволит получить путь к текущему каталогу (рабочий каталог печати).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...