Ich habe ein Docker für Windows auf meinem Computer installiert. Es gibt eine Konsolenanwendung, die auf .net core 1.0.0 ausgerichtet ist und versucht, auf eine SQL Server-Datenbank zuzugreifen, die auf einer anderen VM ausgeführt wird. Ich kann den VM, auf dem SQL Server ausgeführt wird, von meinem Computer aus pingen.
Wenn ich versuche, die Konsolenanwendung mit dotnet run
von der Eingabeaufforderung auf meinem Computer aus auszuführen, funktioniert das einwandfrei. Wenn jedoch dieselbe Anwendung in einem Docker-Container ausgeführt wird, erhalte ich eine Nachricht
Bei .__ trat ein netzwerkbedingter oder instanzspezifischer Fehler auf. Herstellen einer Verbindung zu SQL Server. Der Server wurde nicht gefunden oder war nicht erreichbar. Stellen Sie sicher, dass der Instanzname korrekt ist und dass SQL Server ist so konfiguriert, dass Remoteverbindungen zugelassen werden. (provider: TCP Provider, Fehler: 40 - Verbindung zu SQL Server konnte nicht hergestellt werden)
Ich habe es versucht
docker run --add-Host sqldemo:<VM running sql server ip here>
aber das machte keinen Unterschied.
Klicken Sie mit der rechten Maustaste auf Ihre Datenbank und wählen Sie das Optionsfeld "Eigenschaften/Sicherheit/Serverauthentifizierung/SQL Server und Windows-Authentifizierungsmodus". Starten Sie den MS SQL-Dienst neu.
Beispiel
"ConnectionStrings": {
"DefaultConnection": "Server=YourServerName;Database=YourDatabaseName;MultipleActiveResultSets=true;User Id=UserNameYouJustAdded;Password=PassordYouJustCreated"
},
Stellen Sie sicher, dass Sie Trusted_Connection=True
entfernen.
Meine Docker-Beispieldatei
FROM Microsoft/dotnet:nanoserver
ARG source=.
WORKDIR /app
EXPOSE 5000
EXPOSE 1433
ENV ASPNETCORE_URLS http://+:5000
COPY $source .
Wird am selben Speicherort wie die Docker-Datei in einer PowerShell mit erhöhten Rechten ausgeführt
dotnet publish
docker build bin\Debug\netcoreapp1.0\publish -t aspidserver
docker run -it aspidserver cmd
Ich wollte den Container ausführen und sehen, wie die Ausgabe in PowerShell ausgeführt wurde.
Sobald der Container bei der Eingabeaufforderung im Container betriebsbereit war, stieß ich meine Anwendung aus.
dotnet nameOfApplication.dll
Wenn alles nach Plan verlief, sollte man laufen.
Sie können einen Docker-Container mit Netzwerkeinstellungen auf Host
ausführen. Ein solcher Container teilt den Netzwerkstack mit dem Docker-Host und aus Sicht des Containers verweist localhost (oder 127.0.0.1) auf den Docker-Host.
docker run --net=Host ...
Dann sollten Sie die SQL Server-Datenbank aus dem Docker-Container heraus holen wie von Ihrem Host.
wie in dieser Antwort
SQL Server-Instanzzeichenfolgenverbindung in Linux Docker
Laut Saurabh Singh von Microsoft:
Die Unterstützung des Instanznamens ist in Version 1.1 von .Net Core verfügbar. In v1.0 In .Net Core werden Instanzennamen nur unter .__ unterstützt. Windows.
Daher glaube ich nicht, dass Sie von .Net Core 1.0 aus unter Linux eine Verbindung zu einem SQL Server unter Verwendung des Instanznamens herstellen können.
Ihre Wahl scheint zu sein:
don't use instance name wait for .Net Core 1.1 (planned for "Fall 2016") use pre-release version of .Net Core 1.1