Risolvere i problemi dei contenitori Docker di SQL Server
Si applica a: SQL Server - Linux
Questo articolo illustra gli errori comuni riscontrati durante la distribuzione e l'uso di contenitori Docker di SQL Server e descrive le tecniche di risoluzione dei problemi per risolvere il problema.
Errori per i comandi Docker
Se vengono visualizzati errori per i comandi docker
, verificare che il servizio Docker sia in esecuzione e provare a eseguirlo con autorizzazioni elevate.
Ad esempio, in Linux potrebbe essere visualizzato l'errore seguente quando si eseguono i comandi docker
:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Se si riceve questo errore in Linux, provare a eseguire gli stessi comandi preceduti da sudo
. Se il tentativo non riesce, verificare che il servizio Docker sia in esecuzione e, se necessario, avviarlo.
sudo systemctl status docker
sudo systemctl start docker
In Windows assicurarsi di avviare PowerShell o il prompt dei comandi come amministratore.
Importante
La variabile di ambiente SA_PASSWORD
è deprecata. Utilizzare invece MSSQL_SA_PASSWORD
.
Errori di avvio del contenitore di SQL Server
Se non è possibile eseguire il contenitore di SQL Server, provare i test seguenti:
Se si riceve un errore come
failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use.
, si sta tentando di eseguire il mapping della porta del contenitore 1433 a una porta già in uso. Questo problema può verificarsi se si esegue SQL Server localmente nel computer host. Può verificarsi anche se si avviano due contenitori di SQL Server e si tenta di eseguirne il mapping per entrambi alla stessa porta host. In tal caso, usare il parametro-p
per eseguire il mapping della porta del contenitore 1433 a una porta host diversa. Ad esempio:docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
Attenzione
La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.
Se si riceve un errore come
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
quando si tenta di avviare un contenitore, aggiungere l'utente al gruppo docker in Ubuntu. Quindi disconnettersi e accedere di nuovo perché questa modifica influirà sulle nuove sessioni.usermod -aG docker $USER
Controllare se sono presenti messaggi di errore dal contenitore.
docker logs e69e056c702d
Assicurarsi di soddisfare i requisiti minimi di memoria e disco specificati nella sezione dei prerequisiti dell'articolo di avvio rapido.
Se si usa un software di gestione dei contenitori, assicurarsi che supporti l'esecuzione come root dei processi dei contenitori. Il processo sqlservr nel contenitore viene eseguito come root.
Se il contenitore Docker di SQL Server viene chiuso immediatamente dopo l'avvio, controllare i log di Docker. Se si usa PowerShell in Windows con il comando
docker run
, usare le virgolette doppie anziché le virgolette singole. Con PowerShell Core usare le virgolette singole.Esaminare i log di installazione e degli errori di SQL Server.
Abilitare le acquisizioni di dump
Se il processo di SQL Server non riesce all'interno del contenitore, è necessario creare un nuovo contenitore con SYS_PTRACE abilitato. In questo modo viene aggiunta la funzionalità Linux per tracciare un processo, necessaria per la creazione di un file dump per un'eccezione. Il file dump può essere usato dal supporto tecnico per risolvere il problema. Il comando docker run seguente abilita questa funzionalità.
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -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=<password>" -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=<password>" -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=<password>' -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=<password>" -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=<password>" -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=<password>' -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=<password>" -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=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
Attenzione
La password deve seguire i criteri password predefiniti di SQL Server. Per impostazione predefinita, la password deve essere composta da almeno otto caratteri e contenere caratteri di tre delle quattro categorie seguenti: lettere maiuscole, lettere minuscole, cifre in base 10 e simboli. Le password possono contenere fino a 128 caratteri. Usare password il più possibile lunghe e complesse.
Errori di connessione a SQL Server
Se non è possibile connettersi all'istanza di SQL Server in esecuzione nel contenitore, provare i test seguenti:
Verificare che il contenitore di SQL Server sia in esecuzione esaminando la colonna STATUS dell'output di
docker ps -a
. In caso contrario, usaredocker start <Container ID>
per avviarlo.Se è stato eseguito il mapping a una porta host non predefinita (non 1433), assicurarsi di specificare la porta nella stringa di connessione. È possibile visualizzare il mapping delle porte nella colonna PORTS dell'output di
docker ps -a
. Il comando seguente, ad esempio, connette sqlcmd a un contenitore in ascolto sulla porta 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>"
Se è stato usato
docker run
con un volume di dati o un contenitore del volume di dati mappato esistente, SQL Server ignora il valore diMSSQL_SA_PASSWORD
. Al contrario, la password dell'account preconfiguratosa
viene usata dai dati di SQL Server nel volume di dati o nel contenitore del volume di dati. Verificare di usare lasa
password associata ai dati a cui si sta eseguendo il collegamento.Esaminare i log di installazione e degli errori di SQL Server.
Gruppi di disponibilità di SQL Server
Se si usa Docker con i gruppi di disponibilità di SQL Server, esistono due requisiti aggiuntivi.
Eseguire il mapping della porta usata per le comunicazioni di replica (valore predefinito 5022). Ad esempio, specificare
-p 5022:5022
come parte del comandodocker run
.Impostare in modo esplicito il nome host del contenitore con il parametro
-h YOURHOSTNAME
del comandodocker run
. Questo nome host viene usato quando si configura il gruppo di disponibilità. Se non viene specificato con-h
, il valore predefinito è l'ID del contenitore.
Log di configurazione e degli errori di SQL Server
È possibile esaminare i log di installazione e degli errori di SQL Server in /var/opt/mssql/log. Se il contenitore non è in esecuzione, avviare prima di tutto il contenitore. Usare quindi un prompt dei comandi interattivo per esaminare i log. È possibile ottenere l'ID del contenitore eseguendo il comando docker ps
.
docker start <ContainerID>
docker exec -it <ContainerID> "bash"
Dalla sessione bash all'interno del contenitore eseguire i comandi seguenti:
cd /var/opt/mssql/log
cat setup*.log
cat errorlog
Suggerimento
Se è stata montata una directory host in /var/opt/mssql al momento della creazione del contenitore, è invece possibile esaminare la sottodirectory log nel percorso mappato nell'host.
Eseguire comandi in un contenitore
Se è disponibile un contenitore in esecuzione, è possibile eseguire i comandi all'interno del contenitore da un terminale host.
Per ottenere l'ID del contenitore, eseguire:
docker ps -a
Per avviare un terminale bash nel contenitore, eseguire:
docker exec -it <Container ID> /bin/bash
A questo punto è possibile eseguire i comandi come se fossero in esecuzione nel terminale all'interno del contenitore. Al termine, digitare exit
. Viene così chiusa la sessione di esecuzione interattiva dei comandi, ma l'esecuzione del contenitore continua.
Contenuto correlato
- Per informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2017 in Docker, vedere questo articolo di avvio rapido.
- Per informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2019 in Docker, vedere questo articolo di avvio rapido.
- Per informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2022 in Docker, vedere questo articolo di avvio rapido.
Contribuire alla documentazione di SQL
Il contenuto SQL può essere modificato. L'autore delle modifiche contribuirà a migliorare la documentazione e verrà accreditato come collaboratore alla realizzazione della pagina.
Per maggiori informazioni, vedere Come contribuire alla documentazione di SQL Server