Résoudre les problèmes liés aux conteneurs Docker SQL Server
S’applique à : SQL Server - Linux
Cet article traite des erreurs courantes rencontrées lors du déploiement et de l’utilisation de conteneurs Docker SQL Server, puis indique des techniques de résolution des problèmes afin de les corriger.
Erreurs de commande Docker
Si vous recevez des erreurs pour des commandes docker
, assurez-vous que le service Docker est en cours d’exécution et essayez de l’exécuter avec des autorisations élevées.
Par exemple, sur Linux, vous pouvez obtenir l’erreur suivante lors de l’exécution des commandes docker
:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Si vous recevez cette erreur sur Linux, essayez d’exécuter les mêmes commandes précédées de sudo
. En cas d’échec, vérifiez que le service Docker est en cours d’exécution et démarrez-le si nécessaire.
sudo systemctl status docker
sudo systemctl start docker
Sur Windows, vérifiez que vous lancez PowerShell ou votre invite de commandes en tant qu’administrateur.
Important
La variable d’environnement SA_PASSWORD
est dépréciée. Utilisez MSSQL_SA_PASSWORD
à la place.
Erreurs de démarrage du conteneur SQL Server
Si le conteneur SQL Server ne parvient pas à s’exécuter, essayez les tests suivants :
Si vous recevez une erreur comme
failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use.
, vous essayez de mapper le port 1433 du conteneur à un port qui est déjà en cours d’utilisation. Cela peut se produire si vous exécutez SQL Server localement sur l’ordinateur hôte. Cela peut également se produire si vous démarrez deux conteneurs SQL Server et que vous essayez de les mapper tous les deux sur le même port hôte. Dans ce cas, utilisez le paramètre-p
pour mapper le port de conteneur 1433 sur un port d’hôte différent. Par exemple :docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
Si vous recevez une erreur comme
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
quand vous essayez de démarrer un conteneur, ajoutez votre utilisateur au groupe Docker dans Ubuntu. Ensuite, déconnectez-vous et reconnectez-vous, car cette modification affecte les nouvelles sessions.usermod -aG docker $USER
Vérifiez si des messages d’erreur s’affichent dans le conteneur.
docker logs e69e056c702d
Assurez-vous que vous respectez les exigences minimales en matière de mémoire et de disque spécifiées dans la section conditions préalables de l’article de démarrage rapide.
Si vous utilisez un logiciel de gestion de conteneur, vérifiez qu’il prend en charge les processus de conteneur s’exécutant en tant que root. Le processus sqlservr dans le conteneur s’exécute en tant que root.
Si votre conteneur Docker SQL Server s’arrête immédiatement après son démarrage, vérifiez vos journaux Docker. Si vous utilisez PowerShell sur Windows avec la commande
docker run
, utilisez des guillemets doubles plutôt que simples. Avec PowerShell Core, utilisez des guillemets simples.Passez en revue les journaux de configuration et des erreurs de SQL Server.
Activer le vidage de captures
Si le processus de SQL Server échoue à l’intérieur du conteneur, vous devez créer un nouveau conteneur avec SYS_PTRACE activé. Cela ajoute la fonctionnalité Linux de suivi de processus, ce qui est nécessaire pour créer un fichier de vidage sur une exception. Le fichier de vidage peut être utilisé par le support pour vous aider à résoudre le problème. La commande Docker suivante active cette fonctionnalité.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
Échecs de connexion à SQL Server
Si vous ne pouvez pas vous connecter à l’instance SQL Server s’exécutant dans votre conteneur, effectuez les tests suivants :
Assurez-vous que votre conteneur SQL Server est en cours d'exécution en consultant la colonne ÉTAT de la sortie
docker ps -a
. Si ce n’est pas le cas, utilisezdocker start <Container ID>
pour le démarrer.Si vous avez mappé à un port hôte autre que celui par défaut (pas 1433), vérifiez que vous spécifiez le port dans votre chaîne de connexion. Vous pouvez voir votre mappage de port dans la colonne PORTS de la sortie
docker ps -a
. Par exemple, la commande suivante connecte sqlcmd à un conteneur qui écoute sur le port 1401 :sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
Si vous avez utilisé
docker run
avec un volume de données ou un conteneur de volume de données mappé existant, SQL Server ignore la valeur deMSSQL_SA_PASSWORD
. Au lieu de cela, le mot de passe utilisateur préconfiguré est utilisé à partir des données de SQL Server dans le volume de données ou conteneur de volume de données. Vérifiez que vous utilisez le mot de passe SA associé aux données pour lesquelles vous effectuez la jointure.Passez en revue les journaux de configuration et des erreurs de SQL Server.
Groupes de disponibilité SQL Server
Si vous utilisez Docker avec des groupes de disponibilité SQL Server, il y a deux exigences supplémentaires.
Mappez le port utilisé pour la communication du réplica (5022 par défaut). Par exemple, spécifiez
-p 5022:5022
dans le cadre de votre commandedocker run
.Définissez explicitement le nom d’hôte du conteneur avec le paramètre
-h YOURHOSTNAME
de la commandedocker run
. Ce nom d’hôte est utilisé lorsque vous configurez votre groupe de disponibilité. Si vous ne le spécifiez pas avec-h
, l’ID du conteneur est utilisé par défaut.
Journaux de configuration et des erreurs de SQL Server
Vous pouvez consulter les journaux de configuration et des erreurs de SQL Server dans /var/opt/mssql/log. Si le conteneur n’est pas en cours d’exécution, démarrez d’abord le conteneur. Utilisez ensuite une invite de commandes interactive pour inspecter les journaux. Vous pouvez obtenir l’ID du conteneur en exécutant la commande docker ps
.
docker start <ContainerID>
docker exec -it <ContainerID> "bash"
À partir de la session bash à l’intérieur de votre conteneur, exécutez les commandes suivantes :
cd /var/opt/mssql/log
cat setup*.log
cat errorlog
Conseil
Si vous avez monté un répertoire hôte sur /var/opt/mssql lorsque vous avez créé votre conteneur, vous pouvez à la place l’examiner dans le sous-répertoire log sur le chemin d’accès mappé sur l’ordinateur hôte.
Exécuter des commandes dans un conteneur
Si vous disposez d’un conteneur en cours d’exécution, vous pouvez exécuter des commandes dans le conteneur à partir d’un terminal hôte.
Pour récupérer l’ID de conteneur, exécutez :
docker ps -a
Pour démarrer un terminal bash dans le conteneur, exécutez :
docker exec -it <Container ID> /bin/bash
Vous pouvez maintenant exécuter des commandes comme si vous les exécutiez sur le terminal à l’intérieur du conteneur. Quand vous avez terminé, tapez exit
. Cela quitte la session de commande interactive, mais votre conteneur continue à s’exécuter.
Contenu connexe
- Bien démarrer avec les images de conteneur SQL Server 2017 sur Docker en avec le démarrage rapide.
- Bien démarrer avec les images de conteneur SQL Server 2019 sur Docker en suivant le démarrage rapide.
- Démarrage avec les images de conteneur SQL Server 2022 sur Docker en suivant le démarrage rapide.
Contribuer à la documentation SQL
Saviez-vous que vous pouvez modifier le contenu SQL vous-même ? Dans ce cas, non seulement vous nous aidez à améliorer notre documentation, mais vous êtes également cité en tant que contributeur à la page.
Pour plus d’informations, consultez Guide pratique pour contribuer à la documentation SQL Server