Ich versuche, ein Docker-Image für die .NET Core-App zu erstellen. Aber ich kann nicht herausfinden, wie ich die NuGet-Abhängigkeiten des Projekts in das Bild bekommen soll.Wie können Abhängigkeiten in das Docker-Image von .NET Core integriert werden?
Aus Gründen der Einfachheit habe ich eine .NET-Core-Konsolenanwendung erstellen:
using System;
using Newtonsoft.Json;
namespace ConsoleCoreTestApp
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine($"Hello World: {JsonConvert.False}");
}
}
}
Es hat nur eine NuGet Abhängigkeit von Newtonsoft.Json
. Wenn ich die App von Visual Studio aus starte, funktioniert alles einwandfrei.
Allerdings, wenn ich ein Docker Bild aus dem Projekt erstellen und versuchen, die App von dort auszuführen, kann es nicht die Abhängigkeit finden:
# dotnet ConsoleCoreTestApp.dll
Error: assembly specified in the dependencies manifest was not found -- package: 'Newtonsoft.Json', version: '9.0.1', path: 'lib/netstandard1.0/Newtonsoft.Json.dll'
Dies ist zu erwarten, da Newtonsoft.Json.dll
nicht kopiert wird von Visual Studio in den Ausgabeordner.
Hier ist die Dockerfile
Ich verwende:
FROM microsoft/dotnet:1.0.0-core
COPY bin/Debug /app
Gibt es eine empfohlene Weg, mit diesem Problem umzugehen?
Ich möchte dotnet restore
innerhalb des Containers nicht ausführen (wie ich alle Abhängigkeiten nicht jedes Mal neu downloaden möchte, wenn der Container ausgeführt wird).
Ich denke, ich könnte einen RUN dotnet restore
Eintrag zu Dockerfile
hinzufügen, aber dann konnte ich microsoft/dotnet:<version>-core
nicht mehr als Basisbild verwenden.
Und ich konnte keinen Weg finden, Visual Studio zu veranlassen, alle Abhängigkeiten in den Ausgabeordner zu kopieren (wie bei regulären .NET Framework-Projekten).
Ich bin keine .net Person also verzeih meine Ignoranz ... Warum verhindert das Hinzufügen einer 'RUN dotnet restore' die Verwendung des dotnet Basisbildes? – Matt
@Matt ist korrekt, es sollte Sie nicht daran hindern, das 'microsoft/dotnet'-Basisbild zu verwenden. –
@Matt Da das Kern-Image nicht den Wiederherstellungsbefehl enthält. –