2016-10-26 1 views
4

У меня есть проект .NET Core (с использованием visual studio и добавлены файлы докеров через Visual Studio Tools for Docker).Как передать параметры в основной проект .net с файлом docker

Мои DockerFile выглядит следующим образом:

FROM microsoft/dotnet:1.0.1-core 
ARG source=. 
WORKDIR /app 
COPY $source . 
ENTRYPOINT ["dotnet", "MyApp.dll"] 
CMD ["arg1", "arg2"] 

Мой вопрос, как я могу передать параметры в проект?

public static void Main(string[] args) 
{ 
    // how does `args` get populated? 
} 

enter image description here

ответ

1

Я использовал переменные окружения, которые могут быть установлены с помощью Докер-compse.yml слишком

public static class EnvironmentHelper 
{ 
    public const string EnvironmentArguments = "DOTNETCORE_ARGUMENTS"; 
    private static string[] _arguments; 
    public static string[] Arguments 
    { 
     get 
     { 
      bool argumentsExist = _arguments != null && _arguments.Any(); 
      if (!argumentsExist) 
      { 
       IDictionary environmentVariables = Environment.GetEnvironmentVariables(); 
       if (!environmentVariables.Contains(EnvironmentArguments)) 
       { 
        throw new Exception("Environment Arguments do not exist"); 
       } 
       var argumentsHolder = environmentVariables[EnvironmentArguments] as string; 
       const char argumentSeparator = ' '; 
       _arguments = argumentsHolder?.Split(argumentSeparator); 
      } 
      return _arguments; 
     } 
    } 
} 
1

Вы можете сделать это с помощью комбинации ENTRYPOINT установить команду и CMD установить параметры по умолчанию.

Пример для приложения ASP.NET Core:

ENTRYPOINT ["dotnet", "app.dll"] 
CMD ["argument"] 

Если запустить контейнер, без команды, он будет выполнять эту команду при запуске контейнера:

dotnet app.dll argument 

И args массив будет иметь одну запись, «аргумент». Но вы можете передать команду о docker run переопределить CMD определение:

docker run app arg1 arg2 
+0

Мда, что не работает. Я обновил вопрос с помощью снимка экрана и обновленного файла DockerFile на основе ваших отзывов. – devlife

0

Один из подходов будет читать в переменных окружения. Вы не будете изменять свой файл Docker для этого. Скорее всего, что вы запустите свой контейнер следующим образом:

$ FOO="bar" 
$ docker run -e FOO=$FOO devlife/myapp 

Все, что вам теперь нужно выяснить, как читать FOO переменные среды в приложении dotnetcore. Я хотел бы попробовать подход, описываемая здесь: ASP .NET Core read environment variables

Смежные вопросы