2016-10-26 2 views
4

Ich habe ein .NET Core-Projekt (mit Visual Studio und fügte die Docker-Dateien über die Visual Studio Tools for Docker).So übergeben Sie Parameter an ein .net-Core-Projekt mit dockerfile

Meine DockerFile sieht wie folgt aus:

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

Meine Frage ist, wie gehe ich Parameter in das Projekt?

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

enter image description here

Antwort

1

I Umgebungsvariablen verwendet, die durch Docker-compse.yml eingestellt werden kann zu

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

Sie können dies von ENTRYPOINT mit einer Kombination tun den Befehl zu setzen, und CMD Standardoptionen festlegen.

Beispiel, für eine ASP.NET-Core-App:

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

Wenn Sie den Container ohne Befehl ausführen, wird es diesen Befehl ausführen, wenn der Behälter beginnt:

dotnet app.dll argument 

Und die args Array hat einen Eintrag, "Argument". Sie können jedoch einen Befehl o docker run passieren die CMD Definition außer Kraft zu setzen:

docker run app arg1 arg2 
+0

Hmm, das nicht funktioniert. Ich habe die Frage mit einem Screenshot und einer aktualisierten DockerFile basierend auf deinem Feedback aktualisiert. – devlife

0

Ein Ansatz in Umgebungsvariablen zu lesen wäre. Sie würden Ihre Dockerfile dafür nicht ändern. Vielmehr sagen Sie auf Ihren Container laufen wie folgt:

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

Alles, was Sie jetzt brauchen, um herauszufinden, wie das FOO-Umgebungsvariable in Ihrer dotnetcore Anwendung zu lesen. Ich würde versuchen, das Konzept hier dokumentiert: ASP .NET Core read environment variables

Verwandte Themen