Behandeln von Problemen mit Azure SQL Edge-Bereitstellungen
Wichtig
Azure SQL Edge unterstützt die ARM64-Plattform nicht mehr.
Dieser Artikel enthält Informationen zu Fehlern, die auftreten können, wenn Azure SQL Edge-Container bereitgestellt und verwendet werden, und beschreibt Problembehandlungstechniken, mit denen diese Probleme behoben werden können.
Azure SQL Edge unterstützt zwei Bereitstellungsmodelle:
Verbinden ed deployment through Azure IoT Edge: Azure SQL Edge is available on the Azure Marketplace and can be deployed as a module for Azure IoT Edge. Weitere Informationen finden Sie unter Bereitstellen von Azure SQL Edge.
Getrennte Bereitstellung: Azure SQL Edge-Containerimages können vom Docker-Hub abgerufen und entweder als eigenständiger Container oder auf einem Kubernetes-Cluster bereitgestellt werden. Weitere Informationen finden Sie unter Bereitstellen von Azure SQL Edge mit Docker und Bereitstellen eines Azure SQL Edge-Containers in Kubernetes.
Problembehandlung für IoT Edge-Geräte und -Bereitstellungen
Tritt beim Bereitstellen von SQL Edge über Azure IoT Edge ein Fehler auf, vergewissern Sie sich, dass der iotedge
-Dienst ordnungsgemäß konfiguriert ist und ausgeführt wird. Die folgenden Dokumente können bei der Behandlung von Problemen im Zusammenhang mit Azure IoT Edge hilfreich sein:
- Häufig auftretende Probleme und Lösungen für Azure IoT Edge
- Behandeln von Problemen bei Ihrem IoT Edge-Gerät
Fehler bei Docker-Befehlen
Wenn Sie Fehler für Befehle docker
erhalten, stellen Sie sicher, dass der Docker-Dienst ausgeführt wird, und versuchen Sie, mit erhöhten Berechtigungen auszuführen.
Unter Linux kann beispielsweise folgender Fehler auftreten, wenn Sie docker
-Befehle ausführen:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Wenn dieser Fehler unter Linux auftritt, versuchen Sie, diese Befehle mit sudo
auszuführen. Wenn dies fehlschlägt, überprüfen Sie, ob der Docker-Dienst ausgeführt wird, und starten Sie ihn bei Bedarf.
sudo systemctl status docker
sudo systemctl start docker
Vergewissern Sie sich unter Windows, dass Sie PowerShell oder die Eingabeaufforderung als Administrator starten.
Startfehler bei Azure SQL Edge-Containern
Wenn der SQL Edge-Container nicht ausgeführt werden kann, gehen Sie wie folgt vor:
Wenn Sie Azure IoT Edge verwenden, stellen Sie sicher, dass die Modulimages erfolgreich heruntergeladen wurden und dass die Umgebungsvariablen und containeroptionen ordnungsgemäß im Modulmanifest angegeben sind.
Wenn Sie Docker- oder Kubernetes-basierte Bereitstellung verwenden, stellen Sie sicher, dass der
docker run
Befehl ordnungsgemäß gebildet ist. Weitere Informationen finden Sie unter Bereitstellen von Azure SQL Edge mit Docker und Bereitstellen eines Azure SQL Edge-Containers in Kubernetes.Wenn Sie einen Fehler wie
failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use.
erhalten, versuchen Sie, den Containerport 1433 einem bereits verwendeten Port zuzuordnen. Dieser Fall kann eintreten, wenn Sie SQL Edge lokal auf dem Hostcomputer ausführen. Dieser Fall kann außerdem eintreten, wenn Sie zwei SQL Edge-Container starten und versuchen, diese demselben Hostport zuzuordnen. Verwenden Sie in diesem Fall den Parameter-p
, um den Containerport 1433 einem anderen Hostport zuzuordnen. Beispiel:sudo docker run --cap-add SYS_PTRACE -e 'ACCEPT_EULA=1' -e 'MSSQL_SA_PASSWORD=yourStrong(!)Password' -p 1433:1433 --name azuresqledge -d mcr.microsoft.com/azure-sql-edge-developer.
Wenn Sie beim Versuch, einen Container zu starten, einen Fehler wie
Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30tdout=1&tail=all: dial unix /var/run/docker.sock: connect: permission denied
erhalten, fügen Sie den Benutzer der Docker-Gruppe in Ubuntu hinzu. Melden Sie sich dann ab und wieder an, da sich diese Änderung auf neue Sitzungen auswirkt.usermod -aG docker $USER
Überprüfen Sie, ob Fehlermeldungen in Bezug auf den Container vorhanden sind.
docker logs e69e056c702d
Wenn Sie Containerverwaltungssoftware verwenden, müssen Sie sicherstellen, dass diese die Ausführung von Containerprozessen als Root unterstützt. Der Prozess „sqlservr“ im Container wird als Root ausgeführt.
Azure SQL Edge-Container werden standardmäßig als Nicht-root-Benutzer namens
mssql
ausgeführt. Wenn Sie Bereitstellungspunkte oder Datenvolumes zum Speichern von Daten verwenden, stellen Sie sicher, dass dermssql
Benutzer über entsprechende Berechtigungen für das Volume verfügt. Weitere Informationen finden Sie unter Ausführen als Nicht-Root-Benutzer und Persistentes Speichern von Daten.Wenn Ihr SQL Edge-Docker-Container sofort nach dem Start beendet wird, überprüfen Sie die Docker-Protokolle. Wenn Sie PowerShell unter Windows mit dem Befehl
docker run
verwenden, verwenden Sie doppelte Anführungszeichen anstelle von einfachen Anführungszeichen. Verwenden Sie mit PowerShell Core einfache Anführungszeichen.Überprüfen Sie die SQL Edge-Fehlerprotokolle.
SQL Edge-Verbindungsfehler
Wenn Sie keine Verbindung mit der SQL Edge-Instanz herstellen können, die in Ihrem Container ausgeführt wird, versuchen Sie Folgendes:
Stellen Sie sicher, dass Ihr SQL Edge-Container ausgeführt wird, indem Sie sich die
STATUS
Spalte derdocker ps -a
Ausgabe ansehen. Starten Sie ihn andernfalls mitdocker start <Container ID>
.Wenn Sie den Container nicht dem Standardhostport 1433 zugeordnet haben, müssen Sie den Port in der Verbindungszeichenfolge angeben. Die Portzuordnung wird in der
PORTS
Spalte derdocker ps -a
Ausgabe angezeigt. Weitere Informationen zum Herstellen einer Verbindung mit Azure SQL Edge finden Sie unter Verbinden und Abfragen von Azure SQL Edge.Wenn Sie SQL Edge zuvor mit einem zugeordneten Datenvolume- oder Datenvolumecontainer bereitgestellt haben und jetzt den vorhandenen zugeordneten Datenvolume- oder Datenvolumecontainer verwenden, ignoriert SQL Edge den Wert der Umgebungsvariable
MSSQL_SA_PASSWORD
. Stattdessen wird das zuvor konfigurierte SA-Benutzerkennwort verwendet. Dies geschieht, da SQL Edge die vorhandenenmaster
Datenbankdateien im zugeordneten Volume- oder Datenvolumecontainer wiederverwendet. Wenn dieses Problem auftritt, können Sie die folgenden Optionen verwenden:- Herstellen einer Verbindung mit dem zuvor verwendeten Kennwort, wenn es noch verfügbar ist
- Konfigurieren von SQL Edge, sodass ein anderes zugeordnetes Volume oder ein anderer zugeordneter Datenvolumecontainer verwendet wird
- Entfernen Sie die vorhandenen
master
Datenbankdateien (master.mdf
undmastlog.mdf
) aus dem zugeordneten Volume- oder Datenvolumecontainer.
Überprüfen Sie die SQL Edge-Fehlerprotokolle.
SQL Edge-Setup- und Fehlerprotokolle
Standardmäßig sind SQL Edge-Fehlerprotokolle im /var/opt/mssql/log
Verzeichnis innerhalb des Containers vorhanden und können auf eine der folgenden Arten zugegriffen werden:
Wenn Sie beim Erstellen des Containers ein Hostverzeichnis
/var/opt/mssql
bereitgestellt haben, können Sie stattdessen imlog
Unterverzeichnis auf dem zugeordneten Pfad auf dem Host suchen.Durch Verwenden einer interaktiven Eingabeaufforderung, um eine Verbindung mit dem Container herzustellen. Wenn der Container nicht ausgeführt wird, starten Sie diesen zunächst. Verwenden Sie dann eine interaktive Eingabeaufforderung, um die Protokolle zu überprüfen. Die Container-ID können Sie durch Ausführen des Befehls
docker ps
abrufen.docker start <ContainerID> docker exec -it <ContainerID> "/bin/bash"
Führen Sie folgende Befehle über die Bash-Sitzung in Ihrem Container aus:
cd /var/opt/mssql/log cat errorlog
Wenn der SQL Edge-Container ausgeführt wird und Sie mithilfe von Clienttools eine Verbindung mit der Instanz herstellen können, können Sie die gespeicherte Prozedur
sp_readerrorlog
verwenden, um den Inhalt des SQL Edge-Fehlerprotokolls zu lesen.
Ausführen von Befehlen in einem Container
Wenn Sie bereits einen Container ausführen, können Sie über ein Hostterminal Befehle innerhalb des Containers ausführen.
So rufen Sie die Container-ID ab:
docker ps -a
So starten Sie ein Bash-Terminal in der Containerausführung:
docker exec -it <Container ID> /bin/bash
Nun können Sie Befehle wie über das Terminal innerhalb des Containers ausführen. Wenn Sie fertig sind, geben Sie exit
ein. Dadurch wird die interaktive Befehlssitzung beendet, aber der Container wird weiter ausgeführt.
Ausführliche Protokollierung aktivieren
Wenn die Standardprotokollebene für das Streamingmodul nicht genügend Informationen bereitstellt, kann die Debugprotokollierung für das Streamingmodul in SQL Edge aktiviert werden. Um die Debugprotokollierung zu aktivieren, fügen Sie der SQL Edge-Bereitstellung die RuntimeLogLevel=debug
Umgebungsvariable hinzu. Nach dem Aktivieren der Debugprotokollierung sollten Sie versuchen, das Problem zu reproduzieren, und überprüfen Sie die Protokolle hinsichtlich relevanter Meldungen oder Ausnahmen.
Hinweis
Die Option für die ausführliche Protokollierung sollte nur für die Problembehandlung und nicht für reguläre Produktionsworkloads verwendet werden.