Знание того, существует ли каталог в контейнере docker Linux из c#

#c# #docker #asp.net-core #dockerfile

#c# #докер #asp.net-core #dockerfile

Вопрос:

Я развертываю ASP.NET Основное приложение к контейнеру docker Linux, запущенному в Docker Desktop (на моем компьютере установлена Windows). Я создал Dockerfile, начиная с:

   FROM mcr.microsoft.com/dotnet/core/runtime:2.1-stretch-slim AS base
  WORKDIR /app/backend
  

Создание образа прошло успешно, но когда я запускаю приложение в контейнере, я получаю необработанное исключение: System.NullReferenceException. Я могу отлаживать, используя поддержку Docker в VS 2019, и я обнаружил, что это возвращает false и выдает исключение:

 if (!Directory.Exists("/app/backend"))
        {
            throw some custom exception;
        }
  

Я пробовал это, но это тоже не сработало

  DirectoryInfo dir = new DirectoryInfo("/app/backend");

        if (!dir.Exists)
        {
            throw some custom exception
        }
  

Я не могу понять, почему он не работает.

Комментарии:

1. Я думаю, это потому, что ваш рабочий каталог является /app/backend , а исполняемая DLL будет существовать внутри внутренней папки в Linux. Таким образом, ваш код будет искать папку executingPath/app/backend . Итак, попробуйте использовать var path = Server.MapPath("~/app/backend"); if(!Directory.Exists(path))

2. Ни один из опубликованных вами кодов не вызывает исключения NullReferenceException — пожалуйста, исправьте свой вопрос

3. Кроме того, я не совсем понимаю, почему код должен проверять наличие каталога, и если он не существует, выдавать исключение, настолько неясное, что вам приходится использовать отладчик для его обработки; если код хочет иметь каталог / app / backend, он должен просто создать его, а затем использовать или, по крайней мере, выдать исключение с разумным сообщением .. но если все, что сделает администратор, это создаст папку и перезапустит приложение, код должен создать саму папку