Configurare immagini del contenitore di SQL Server in DockerConfigure SQL Server container images on Docker

SI APPLICA A: sìSQL Server (solo Linux) noDatabase SQL di Azure noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Questo articolo illustra come configurare e usare l'immagine del contenitore mssql-server-linux con Docker.This article explains how to configure and use the mssql-server-linux container image with Docker.

Per altri scenari di distribuzione, vedere:For other deployment scenarios, see:

Questa immagine è costituita da SQL Server in esecuzione su Linux basato su Ubuntu 16.04.This image consists of SQL Server running on Linux based on Ubuntu 16.04. Può essere usata con il motore Docker 1.8 o versione successiva su Linux o in Docker per Mac/Windows.It can be used with the Docker Engine 1.8+ on Linux or on Docker for Mac/Windows.

Nota

Questo articolo è incentrato nello specifico sull'uso dell'immagine mssql-server-linux.This article specifically focuses on using the mssql-server-linux image. L'immagine di Windows non è qui trattata, ma è possibile ottenere informazioni su di essa nella pagina mssql-server-windows di Docker Hub.The Windows image is not covered, but you can learn more about it on the mssql-server-windows Docker Hub page.

Importante

Prima di scegliere di eseguire un contenitore SQL Server per i casi d'uso di produzione, vedere i criteri di supporto per i contenitori SQL Server per assicurarsi che l'esecuzione avvenga in una configurazione supportata.Before choosing to run a SQL Server container for production use cases, please review our support policy for SQL Server Containers to ensure that you are running on a supported configuration.

Effettuare il pull ed eseguire l'immagine del contenitorePull and run the container image

Per il pull e l'esecuzione delle immagini del contenitore Docker per SQL Server 2017 e SQL Server 2019, seguire i prerequisiti e i passaggi illustrati nella guida di avvio rapido seguente:To pull and run the Docker container images for SQL Server 2017 and SQL Server 2019, follow the prerequisites and steps in the following quickstart:

Questo articolo dedicato alla configurazione descrive altri scenari di utilizzo nelle sezioni seguenti.This configuration article provides additional usage scenarios in the following sections.

Eseguire immagini del contenitore basate su RHELRun RHEL-based container images

La documentazione dedicata alle immagini del contenitore di SQL Server per Linux si riferisce a contenitori basati su Ubuntu.The documentation for SQL Server Linux container images points to Ubuntu-based containers. A partire da SQL Server 2019, è possibile usare contenitori basati su Red Hat Enterprise Linux (RHEL).Beginning with SQL Server 2019, you can use containers based on Red Hat Enterprise Linux (RHEL). Modificare il repository dei contenitori da mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04 a mcr.microsoft.com/mssql/rhel/server:2019-RC1 in tutti i comandi di Docker.Change the container repository from mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04 to mcr.microsoft.com/mssql/rhel/server:2019-RC1 in all of your docker commands.

Il comando seguente, ad esempio, esegue il pull del contenitore di SQL Server 2019 più recente che usa RHEL:For example, the following command pulls the latest SQL Server 2019 container that uses RHEL:

sudo docker pull mcr.microsoft.com/mssql/rhel/server:2019-RC1
docker pull mcr.microsoft.com/mssql/rhel/server:2019-RC1

Nota

A partire dalla versione GA di SQL Server 2019, l'immagine del contenitore RHEL più recente corrisponde ancora alla versione RC1.As of the GA release of SQL Server 2019, the latest RHEL container image is still the RC1 version. Questa versione non è destinata all'uso in produzione.This version is not meant for production use. Questo articolo verrà aggiornato quando sarà disponibile un'immagine del contenitore RHEL più recente.This article will be updated when a newer RHEL container image becomes available.

Eseguire immagini del contenitore di produzioneRun production container images

Le istruzioni di avvio rapido nella sezione precedente prevedono l'uso dell'edizione Developer gratuita di SQL Server da Docker Hub.The quickstart in the previous section runs the free Developer edition of SQL Server from Docker Hub. La maggior parte delle informazioni è comunque applicabile per l'esecuzione di immagini del contenitore di produzione, ad esempio per le edizioni Enterprise, Standard o Web.Most of the information still applies if you want to run production container images, such as Enterprise, Standard, or Web editions. Esistono tuttavia alcune differenze descritte di seguito.However, there are a few differences that are outlined here.

  • È possibile usare SQL Server in un ambiente di produzione solo se è disponibile una licenza valida.You can only use SQL Server in a production environment if you have a valid license. Qui è possibile ottenere una licenza di produzione per SQL Server Express gratuita.You can obtain a free SQL Server Express production license here. Le licenze delle edizioni SQL Server Standard ed Enterprise sono disponibili tramite Microsoft Volume Licensing.SQL Server Standard and Enterprise Edition licenses are available through Microsoft Volume Licensing.

  • È possibile configurare l'immagine del contenitore Developer anche per eseguire le edizioni di produzione.The Developer container image can be configured to run the production editions as well. Per eseguire le edizioni di produzione, seguire questa procedura:Use the following steps to run production editions:

Esaminare i requisiti e ed eseguire le procedure in questo avvio rapido.Review the requirements and run procedures in the quickstart. È necessario specificare l'edizione di produzione con la variabile di ambiente MSSQL_PID.You must specify your production edition with the MSSQL_PID environment variable. L'esempio seguente mostra come eseguire la versione più recente dell'immagine del contenitore di SQL Server 2017 per l'edizione Enterprise:The following example shows how to run the latest SQL Server 2017 container image for the Enterprise Edition:

docker run --name sqlenterprise \
      -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
      -e 'MSSQL_PID=Enterprise' -p 1433:1433 \
      -d mcr.microsoft.com/mssql/server:2017-latest
docker run --name sqlenterprise `
      -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
      -e "MSSQL_PID=Enterprise" -p 1433:1433 `
      -d "mcr.microsoft.com/mssql/server:2017-latest"

Importante

Passando il valore Y alla variabile di ambiente ACCEPT_EULA e un valore di edizione a MSSQL_PID, si conferma la disponibilità di una licenza valida ed esistente per l'edizione e la versione di SQL Server che si intende usare.By passing the value Y to the environment variable ACCEPT_EULA and an edition value to MSSQL_PID, you are expressing that you have a valid and existing license for the edition and version of SQL Server that you intend to use. Si accetta anche che l'uso del software SQL Server in un'immagine del contenitore Docker sarà disciplinato dalle condizioni della licenza di SQL Server.You also agree that your use of SQL Server software running in a Docker container image will be governed by the terms of your SQL Server license.

Nota

Per un elenco completo dei valori possibili per MSSQL_PID, vedere Configurare le impostazioni di SQL Server con le variabili di ambiente in Linux.For a full list of possible values for MSSQL_PID, see Configure SQL Server settings with environment variables on Linux.

Connessione ed esecuzione di queryConnect and query

È possibile connettersi a SQL Server ed eseguire query in un contenitore dall'esterno o dall'interno del contenitore.You can connect and query SQL Server in a container from either outside the container or from within the container. Nelle sezioni seguenti vengono illustrati entrambi gli scenari.The following sections explain both scenarios.

Strumenti all'esterno del contenitoreTools outside the container

È possibile connettersi all'istanza di SQL Server nel computer che esegue Docker da uno strumento esterno Linux, Windows o macOS che supporti le connessioni SQL.You can connect to the SQL Server instance on your Docker machine from any external Linux, Windows, or macOS tool that supports SQL connections. Alcuni strumenti comuni includono:Some common tools include:

Nell'esempio seguente viene usato sqlcmd per connettersi a SQL Server in esecuzione in un contenitore Docker.The following example uses sqlcmd to connect to SQL Server running in a Docker container. L'indirizzo IP nella stringa di connessione è l'indirizzo IP del computer host in cui è in esecuzione il contenitore.The IP address in the connection string is the IP address of the host machine that is running the container.

sqlcmd -S 10.3.2.4 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4 -U SA -P "<YourPassword>"

Se è stato eseguito il mapping di una porta host diversa dalla porta predefinita 1433, aggiungere tale porta alla stringa di connessione.If you mapped a host port that was not the default 1433, add that port to the connection string. Ad esempio, se si specifica -p 1400:1433 nel comando docker run connettersi specificando in modo esplicito la porta 1400.For example, if you specified -p 1400:1433 in your docker run command, then connect by explicitly specify port 1400.

sqlcmd -S 10.3.2.4,1400 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1400 -U SA -P "<YourPassword>"

Strumenti all'interno del contenitoreTools inside the container

A partire da SQL Server 2017, gli strumenti da riga di comando di SQL Server sono inclusi nell'immagine del contenitore.Starting with SQL Server 2017, the SQL Server command-line tools are included in the container image. Se ci si connette all'immagine con un prompt dei comandi interattivo, è possibile eseguire gli strumenti localmente.If you attach to the image with an interactive command-prompt, you can run the tools locally.

  1. Usare il comando docker exec -it per avviare una shell Bash interattiva all'interno del contenitore in esecuzione.Use the docker exec -it command to start an interactive bash shell inside your running container. Nell'esempio seguente e69e056c702d è l'ID del contenitore.In the following example e69e056c702d is the container ID.

    docker exec -it e69e056c702d "bash"
    

    Suggerimento

    Non è sempre necessario specificare l'intero ID del contenitore. È sufficiente specificare un numero sufficiente di caratteri per identificarlo in modo univoco.You don't always have to specify the entire container id. You only have to specify enough characters to uniquely identify it. In questo esempio potrebbe essere quindi sufficiente usare e6 o e69 anziché l'ID completo.So in this example, it might be enough to use e6 or e69 rather than the full id.

  2. Una volta all'interno del contenitore, eseguire la connessione in locale con sqlcmd.Once inside the container, connect locally with sqlcmd. Si noti che sqlcmd non è incluso nel percorso per impostazione predefinita, quindi occorre specificare il percorso completo.Note that sqlcmd is not in the path by default, so you have to specify the full path.

    /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
    
  3. Dopo aver completato le operazioni con sqlcmd, digitare exit.When finished with sqlcmd, type exit.

  4. Al termine delle operazioni con il prompt dei comandi interattivo, digitare exit.When finished with the interactive command-prompt, type exit. Dopo la chiusura della shell Bash interattiva, il contenitore continua l'esecuzione.Your container continues to run after you exit the interactive bash shell.

Eseguire più contenitori di SQL ServerRun multiple SQL Server containers

Docker prevede un modo per eseguire più contenitori di SQL Server nello stesso computer host.Docker provides a way to run multiple SQL Server containers on the same host machine. Usare questo approccio per gli scenari che richiedono più istanze di SQL Server nello stesso host.Use this approach for scenarios that require multiple instances of SQL Server on the same host. Ogni contenitore deve essere esposto su una porta diversa.Each container must expose itself on a different port.

Nell'esempio seguente vengono creati due contenitori di SQL Server 2017 e ne viene eseguito il mapping alle porte 1401 e 1402 nel computer host.The following example creates two SQL Server 2017 containers and maps them to ports 1401 and 1402 on the host machine.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2017-latest

L'esempio seguente crea due contenitori di SQL Server 2019 ed esegue il mapping di questi alle porte 1401 e 1402 nel computer host.The following example creates two SQL Server 2019 containers and maps them to ports 1401 and 1402 on the host machine.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04

Sono ora disponibili due istanze di SQL Server in esecuzione in contenitori separati.Now there are two instances of SQL Server running in separate containers. I client possono connettersi a ogni istanza di SQL Server usando l'indirizzo IP dell'host Docker e il numero di porta per il contenitore.Clients can connect to each SQL Server instance by using the IP address of the Docker host and the port number for the container.

sqlcmd -S 10.3.2.4,1401 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1402 -U SA -P '<YourPassword>'
sqlcmd -S 10.3.2.4,1401 -U SA -P "<YourPassword>"
sqlcmd -S 10.3.2.4,1402 -U SA -P "<YourPassword>"

Creare un contenitore personalizzatoCreate a customized container

È possibile creare un Dockerfile personalizzato per creare un contenitore di SQL Server personalizzato.It is possible to create your own Dockerfile to create a customized SQL Server container. Per altre informazioni, vedere una demo che combina SQL Server e un'applicazione Node.For more information, see a demo that combines SQL Server and a Node application. Se si crea un Dockerfile personalizzato, tenere conto del processo in primo piano, perché questo processo controlla la durata del contenitore.If you do create your own Dockerfile, be aware of the foreground process, because this process controls the life of the container. Se viene chiuso, il contenitore verrà arrestato.If it exits, the container will shutdown. Ad esempio, se si vuole eseguire uno script e avviare SQL Server, assicurarsi che il processo di SQL Server sia il comando più a destra.For example, if you want to run a script and start SQL Server, make sure that the SQL Server process is the right-most command. Tutti gli altri comandi vengono eseguiti in background.All other commands are run in the background. Il comando seguente illustra questa operazione all'interno di un Dockerfile:The following command illustrates this inside a Dockerfile:

/usr/src/app/do-my-sql-commands.sh & /opt/mssql/bin/sqlservr

Se si invertissero i comandi nell'esempio precedente, il contenitore verrebbe arrestato al termine dello script do-my-sql-commands.sh.If you reversed the commands in the previous example, the container would shutdown when the do-my-sql-commands.sh script completes.

Rendere persistenti i datiPersist your data

Le modifiche apportate alla configurazione del SQL Server e i file di database vengono salvati in modo permanente nel contenitore anche se il contenitore viene riavviato con docker stop e docker start.Your SQL Server configuration changes and database files are persisted in the container even if you restart the container with docker stop and docker start. Tuttavia, se si rimuove il contenitore con docker rm viene eliminato tutto il contenuto al suo interno, inclusi SQL Server e i database.However, if you remove the container with docker rm, everything in the container is deleted, including SQL Server and your databases. La sezione seguente illustra come usare i volumi di dati per rendere persistenti i file di database anche se vengono eliminati i contenitori associati.The following section explains how to use data volumes to persist your database files even if the associated containers are deleted.

Importante

Per SQL Server è fondamentale comprendere la persistenza dei dati in Docker.For SQL Server, it is critical that you understand data persistence in Docker. Oltre alle informazioni in questa sezione, vedere la documentazione di Docker su come gestire i dati nei contenitori Docker.In addition to the discussion in this section, see Docker's documentation on how to manage data in Docker containers.

Montare una directory host come volume di datiMount a host directory as data volume

La prima opzione consiste nel montare una directory nell'host come volume di dati nel contenitore.The first option is to mount a directory on your host as a data volume in your container. A tale scopo, usare il comando docker run con il flag -v <host directory>:/var/opt/mssql.To do that, use the docker run command with the -v <host directory>:/var/opt/mssql flag. In questo modo è possibile ripristinare i dati tra le esecuzioni dei contenitori.This allows the data to be restored between container executions.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v <host directory>:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v <host directory>:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04

Questa tecnica consente anche di condividere e visualizzare i file nell'host all'esterno di Docker.This technique also enables you to share and view the files on the host outside of Docker.

Importante

Il mapping del volume host per Docker su Mac con l'immagine di SQL Server in Linux non è attualmente supportato.Host volume mapping for Docker on Mac with the SQL Server on Linux image is not supported at this time. Usare invece i contenitori di volumi di dati.Use data volume containers instead. Questa restrizione è specifica per la directory /var/opt/mssql.This restriction is specific to the /var/opt/mssql directory. La lettura da una directory montata funziona correttamente.Reading from a mounted directory works fine. Ad esempio, è possibile montare una directory host usando -v in Mac e ripristinare un backup da un file con estensione bak che risiede nell'host.For example, you can mount a host directory using -v on Mac and restore a backup from a .bak file that resides on the host.

Usare i contenitori di volumi di datiUse data volume containers

La seconda opzione consiste nell'usare un contenitore di volumi di dati.The second option is to use a data volume container. È possibile creare un contenitore di volumi di dati specificando un nome di volume anziché una directory host con il parametro -v.You can create a data volume container by specifying a volume name instead of a host directory with the -v parameter. Nell'esempio seguente viene creato un volume di dati condiviso denominato sqlvolume.The following example creates a shared data volume named sqlvolume.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04

Nota

Questa tecnica per la creazione implicita di un volume di dati nel comando run non funziona con le versioni precedenti di Docker.This technique for implicitly creating a data volume in the run command does not work with older versions of Docker. In tal caso, usare i passaggi espliciti descritti nella documentazione di Docker, in Creating and mounting a data volume container (Creazione e montaggio di un contenitore di volumi di dati).In that case, use the explicit steps outlined in the Docker documentation, Creating and mounting a data volume container.

Anche se si arresta e rimuove il contenitore, il volume di dati è persistente.Even if you stop and remove this container, the data volume persists. È possibile visualizzarlo con il comando docker volume ls.You can view it with the docker volume ls command.

docker volume ls

Se successivamente si crea un altro contenitore con lo stesso nome di volume, il nuovo contenitore userà gli stessi dati di SQL Server contenuti nel volume.If you then create another container with the same volume name, the new container uses the same SQL Server data contained in the volume.

Per rimuovere un contenitore di volumi di dati, usare il comando docker volume rm.To remove a data volume container, use the docker volume rm command.

Avviso

Se si elimina il contenitore del volume di dati, tutti i dati di SQL Server nel contenitore verranno eliminati definitivamente.If you delete the data volume container, any SQL Server data in the container is permanently deleted.

Backup e ripristinoBackup and restore

Oltre a queste tecniche con i contenitori, è anche possibile usare le tecniche standard di backup e ripristino di SQL Server.In addition to these container techniques, you can also use standard SQL Server backup and restore techniques. È possibile usare i file di backup per proteggere i dati o per spostare i dati in un'altra istanza di SQL Server.You can use backup files to protect your data or to move the data to another SQL Server instance. Per altre informazioni, vedere Backup e ripristino di database di SQL Server in Linux.For more information, see Backup and restore SQL Server databases on Linux.

Avviso

Se si creano backup, assicurarsi di creare o copiare i file di backup all'esterno del contenitore.If you do create backups, make sure to create or copy the backup files outside of the container. In caso contrario, se il contenitore viene rimosso, vengono eliminati anche i file di backup.Otherwise, if the container is removed, the backup files are also deleted.

Eseguire comandi in un contenitoreExecute commands in a container

Se è disponibile un contenitore in esecuzione, è possibile eseguire i comandi all'interno del contenitore da un terminale host.If you have a running container, you can execute commands within the container from a host terminal.

Per ottenere l'ID del contenitore, eseguire:To get the container ID run:

docker ps

Per avviare un terminale bash nel contenitore, eseguire:To start a bash terminal in the container run:

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.Now you can run commands as though you are running them at the terminal inside the container. Al termine, digitare exit.When finished, type exit. Viene così chiusa la sessione di esecuzione interattiva dei comandi, ma l'esecuzione del contenitore continua.This exits in the interactive command session, but your container continues to run.

Copiare file da un contenitoreCopy files from a container

Per copiare un file dal contenitore, usare il comando seguente:To copy a file out of the container, use the following command:

docker cp <Container ID>:<Container path> <host path>

Esempio:Example:

docker cp d6b75213ef80:/var/opt/mssql/log/errorlog /tmp/errorlog
docker cp d6b75213ef80:/var/opt/mssql/log/errorlog C:\Temp\errorlog

Copiare file in un contenitoreCopy files into a container

Per copiare un file nel contenitore, usare il comando seguente:To copy a file into the container, use the following command:

docker cp <Host path> <Container ID>:<Container path>

Esempio:Example:

docker cp /tmp/mydb.mdf d6b75213ef80:/var/opt/mssql/data
docker cp C:\Temp\mydb.mdf d6b75213ef80:/var/opt/mssql/data

Configurare il fuso orarioConfigure the timezone

Per eseguire SQL Server in un contenitore Linux con un fuso orario specifico, configurare la variabile di ambiente TZ.To run SQL Server in a Linux container with a specific timezone, configure the TZ environment variable. Per trovare il valore del fuso orario corretto, eseguire il comando tzselect da un prompt di bash per Linux:To find the right timezone value, run the tzselect command from a Linux bash prompt:

tzselect

Dopo aver selezionato il fuso orario, tzselect visualizza un output simile al seguente:After selecting the timezone, tzselect displays output similar to the following:

The following information has been given:

        United States
        Pacific

Therefore TZ='America/Los_Angeles' will be used.

È possibile usare queste informazioni per impostare la stessa variabile di ambiente nel contenitore Linux.You can use this information to set the same environment variable in your Linux container. L'esempio seguente mostra come eseguire SQL Server in un contenitore nel fuso orario Americas/Los_Angeles:The following example shows how to run SQL Server in a container in the Americas/Los_Angeles timezone:

sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
   -p 1433:1433 --name sql1 \
   -e 'TZ=America/Los_Angeles'\
   -d mcr.microsoft.com/mssql/server:2017-latest 
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
   -p 1433:1433 --name sql1 `
   -e "TZ=America/Los_Angeles" `
   -d mcr.microsoft.com/mssql/server:2017-latest 
sudo docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' \
   -p 1433:1433 --name sql1 \
   -e 'TZ=America/Los_Angeles'\
   -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04
sudo docker run -e 'ACCEPT_EULA=Y' -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" `
   -p 1433:1433 --name sql1 `
   -e "TZ=America/Los_Angeles" `
   -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04

Eseguire un'immagine del contenitore di SQL Server specificaRun a specific SQL Server container image

Esistono scenari in cui è possibile che non si voglia usare la versione più recente dell'immagine del contenitore di SQL Server.There are scenarios where you might not want to use the latest SQL Server container image. Per eseguire un'immagine del contenitore di SQL Server specifica, seguire questa procedura:To run a specific SQL Server container image, use the following steps:

  1. Identificare il tag di Docker per la versione che si vuole usare.Identify the Docker tag for the release you want to use. Per visualizzare i tag disponibili, vedere la pagina mssql-server-linux dell'hub Docker.To view the available tags, see the mssql-server-linux Docker hub page.

  2. Eseguire il pull dell'immagine del contenitore di SQL Server con il tag.Pull the SQL Server container image with the tag. Ad esempio, per eseguire il pull dell'immagine RC1, sostituire <image_tag> nel comando seguente con rc1.For example, to pull the RC1 image, replace <image_tag> in the following command with rc1.

    docker pull mcr.microsoft.com/mssql/server:<image_tag>
    
  3. Per eseguire un nuovo contenitore con tale immagine, specificare il nome del tag nel comando docker run.To run a new container with that image, specify the tag name in the docker run command. Nel comando seguente sostituire <image_tag> con la versione che si vuole eseguire.In the following command, replace <image_tag> with the version you want to run.

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d mcr.microsoft.com/mssql/server:<image_tag>
    

Questi passaggi possono essere usati anche per effettuare il downgrade di un contenitore esistente.These steps can also be used to downgrade an existing container. Ad esempio, potrebbe essere necessario effettuare il rollback o il downgrade di un contenitore in esecuzione per la risoluzione dei problemi o per attività di test.For example, you might want to rollback or downgrade a running container for troubleshooting or testing. Per effettuare il downgrade di un contenitore in esecuzione, è necessario usare una tecnica di persistenza per la cartella dati.To downgrade a running container, you must be using a persistence technique for the data folder. Seguire la stessa procedura descritta nella sezione dedicata all'aggiornamento, ma specificare il nome del tag della versione precedente quando si esegue il nuovo contenitore.Follow the same steps outlined in the upgrade section, but specify the tag name of the older version when you run the new container.

Controllare la versione del contenitoreCheck the container version

Se si vuole scoprire la versione di SQL Server in un contenitore Docker in esecuzione, eseguire il comando seguente per visualizzarla.If you want to know the version of SQL Server in a running docker container, run the following command to display it. Sostituire <Container ID or name> con l'ID o il nome del contenitore di destinazione.Replace <Container ID or name> with the target container ID or name. Sostituire <YourStrong!Passw0rd> con la password di SQL Server per l'account di accesso sa.Replace <YourStrong!Passw0rd> with the SQL Server password for the SA login.

sudo docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd \
   -S localhost -U SA -P '<YourStrong!Passw0rd>' \
   -Q 'SELECT @@VERSION'
docker exec -it <Container ID or name> /opt/mssql-tools/bin/sqlcmd `
   -S localhost -U SA -P "<YourStrong!Passw0rd>" `
   -Q 'SELECT @@VERSION'

È anche possibile identificare la versione di SQL Server e il numero di build per un'immagine del contenitore Docker di destinazione.You can also identify the SQL Server version and build number for a target docker container image. Il comando seguente visualizza la versione di SQL Server e informazioni sulla build per l'immagine mcr.microsoft.com/mssql/server:2017-latest.The following command displays the SQL Server version and build information for the mcr.microsoft.com/mssql/server:2017-latest image. A tale scopo, esegue un nuovo contenitore con una variabile di ambiente PAL_PROGRAM_INFO = 1.It does this by running a new container with an environment variable PAL_PROGRAM_INFO=1. Il contenitore risultante viene chiuso immediatamente e il comando docker rm lo rimuove.The resulting container instantly exits, and the docker rm command removes it.

sudo docker run -e PAL_PROGRAM_INFO=1 --name sqlver \
   -ti mcr.microsoft.com/mssql/server:2017-latest && \
   sudo docker rm sqlver
docker run -e PAL_PROGRAM_INFO=1 --name sqlver `
   -ti mcr.microsoft.com/mssql/server:2017-latest; `
   docker rm sqlver

I comandi precedenti visualizzano informazioni sulla versione simili all'output seguente:The previous commands display version information similar to the following output:

sqlservr
  Version 14.0.3029.16
  Build ID ee3d3882f1c48a7a7e590a620153012eaedc2f37143d485df945a079b9d4eeea
  Build Type release
  Git Version 65d42c4
  Built at Sat Jun 16 01:20:11 GMT 2018

PAL
  Build ID 60cfcb134bbae96d311f6a4f56aeb5a685b3809de80bcb61ec587a8f58b555eb
  Build Type release
  Git Version 21a4c11
  Built at Sat Jun 16 01:18:53 GMT 2018

Packages
  system.sfp                    6.2.9200.1,21a4c1178,
  system.common.sfp             10.0.15063.540
  system.certificates.sfp       6.2.9200.1,21a4c1178,
  system.netfx.sfp              4.6.1590.0
  secforwarderxplat.sfp         14.0.3029.16
  sqlservr.sfp                  14.0.3029.16
  sqlagent.sfp                  14.0.3029.16

Aggiornare SQL Server nei contenitoriUpgrade SQL Server in containers

Per aggiornare l'immagine del contenitore con Docker, identificare prima di tutto il tag per la versione per l'aggiornamento.To upgrade the container image with Docker, first identify the tag for the release for your upgrade. Eseguire il pull di questa versione dal Registro di sistema con il comando docker pull:Pull this version from the registry with the docker pull command:

docker pull mcr.microsoft.com/mssql/server:<image_tag>

L'immagine di SQL Server viene così aggiornata per tutti i nuovi contenitori creati, ma SQL Server non viene aggiornato in alcun contenitore in esecuzione.This updates the SQL Server image for any new containers you create, but it does not update SQL Server in any running containers. A tale scopo, è necessario creare un nuovo contenitore con l'immagine del contenitore di SQL Server più recente ed eseguire la migrazione dei dati al nuovo contenitore.To do this, you must create a new container with the latest SQL Server container image and migrate your data to that new container.

  1. Assicurarsi di usare una delle tecniche di persistenza dei dati per il contenitore di SQL Server esistente.Make sure you are using one of the data persistence techniques for your existing SQL Server container. In questo modo è possibile avviare un nuovo contenitore con gli stessi dati.This enables you to start a new container with the same data.

  2. Arrestare il contenitore di SQL Server con il comando docker stop.Stop the SQL Server container with the docker stop command.

  3. Creare un nuovo contenitore di SQL Server con docker run e specificare una directory host mappata o un contenitore di volumi di dati.Create a new SQL Server container with docker run and specify either a mapped host directory or a data volume container. Assicurarsi di usare il tag specifico per l'aggiornamento di SQL Server.Make sure to use the specific tag for your SQL Server upgrade. Il nuovo contenitore usa ora una nuova versione di SQL Server con i dati di SQL Server esistenti.The new container now uses a new version of SQL Server with your existing SQL Server data.

    Importante

    L'aggiornamento è supportato solo tra le versioni RC1, RC2 e GA al momento.Upgrade is only supported between RC1, RC2, and GA at this time.

  4. Verificare i database e i dati nel nuovo contenitore.Verify your databases and data in the new container.

  5. Facoltativamente, rimuovere il contenitore precedente con docker rm.Optionally, remove the old container with docker rm.

Compilare ed eseguire contenitori di SQL Server 2017 non radiceBuild and run non-root SQL Server 2017 containers

Eseguire la procedura seguente per creare un contenitore di SQL Server 2017 che si avvia come utente mssql (non root).Follow the steps below to build a SQL Server 2017 container that starts up as the mssql(non-root) user.

Nota

I contenitori di SQL Server 2019 vengono avviati automaticamente come utenti non root. I passaggi seguenti, quindi, si applicano solo ai contenitori di SQL Server 2017, che si avviano come root per impostazione predefinita.SQL Server 2019 containers automatically start up as non-root, so the following steps only apply to SQL Server 2017 containers, which start as root by default.

  1. Scaricare il dockerfile di esempio per il contenitore di SQL Server non radice e salvarlo come dockerfile.Download the sample dockerfile for non-root SQL Server Container and save it as dockerfile.

  2. Eseguire il comando seguente nel contesto della directory dockerfile per compilare il contenitore di SQL Server non radice:Run the following command in the context of the dockerfile directory to build the non-root SQL Server container:

cd <path to dockerfile>
docker build -t 2017-latest-non-root .
  1. Avviare il contenitore.Start the container.
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword@" --cap-add SYS_PTRACE --name sql1 -p 1433:1433 -d 2017-latest-non-root

Nota

Il flag --cap-add SYS_PTRACE è necessario per i contenitori di SQL Server non radice per generare dump a scopo di risoluzione dei problemi.The --cap-add SYS_PTRACE flag is required for non-root SQL Server containers to generate dumps for troubleshooting purposes.

  1. Verificare che il contenitore sia in esecuzione come utente non radice:Check that the container is running as non-root user:

docker exec nel contenitore.docker exec into the container.

docker exec -it sql1 bash

Eseguire whoami che restituirà l'utente in esecuzione nel contenitore.Run whoami which will return the user running within the container.

whoami

Eseguire il contenitore come un altro utente non radice nell'hostRun container as a different non-root user on the host

Per eseguire il contenitore di SQL Server come un altro utente non radice, aggiungere il flag -u al comando docker run.To run the SQL Server container as a different non-root user, add the -u flag to the docker run command. Il contenitore non radice prevede una restrizione, ovvero deve essere eseguito come parte del gruppo radice, a meno che non venga montato un volume in '/var/opt/mssql' a cui l'utente non radice può accedere.The non-root container has the restriction that it must run as part of the root group unless a volume is mounted to '/var/opt/mssql' that the non-root user can access. Il gruppo radice non concede alcuna autorizzazione radice aggiuntiva all'utente non radice.The root group doesn’t grant any extra root permissions to the non-root user.

Eseguire come utente con UID 4000Run as a user with a UID 4000

È possibile avviare SQL Server con un UID personalizzato.You can start SQL Server with a custom UID. Ad esempio, il comando seguente avvia SQL Server con l'UID 4000:For example, the command below starts SQL Server with UID 4000:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" --cap-add SYS_PTRACE -u 4000:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Avviso

Verificare che il contenitore di SQL Server disponga di un utente denominato, ad esempio 'mssql' o 'root'. In caso contrario non sarà possibile eseguire SQLCMD all'interno del contenitore.Ensure that the SQL Server container has a named user such as 'mssql' or 'root' or SQLCMD will not be able to run within the container. È possibile verificare se il contenitore di SQL Server è in esecuzione come utente denominato eseguendo whoami nel contenitore.You can check if the SQL Server container is running as a named user by running whoami within the container.

Eseguire il contenitore non radice come utente radiceRun the non-root container as the root user

Se necessario, è possibile eseguire il contenitore non radice come utente radice.You can run the non-root container as the root user if required. In questo modo, tutte le autorizzazioni per i file vengono concesse automaticamente al contenitore poiché ha privilegi più elevati.This would also grant all file permissions automatically to the container because it is higher privilege.

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" -u 0:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Eseguire come utente nel computer hostRun as a user on your host machine

È possibile avviare SQL Server con un utente esistente nel computer host con il comando seguente:You can start SQL Server with an existing user on the host machine with the following command:

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" --cap-add SYS_PTRACE -u $(id -u myusername):0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Eseguire come utente e gruppo diversiRun as a different user and group

È possibile avviare SQL Server con un utente e un gruppo personalizzati.You can start SQL Server with a custom user and group. In questo esempio, il volume montato ha le autorizzazioni configurate per l'utente o il gruppo nel computer host.In this example, the mounted volume has permissions configured for the user or group on the host machine.

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" --cap-add SYS_PTRACE -u (id -u myusername):(id -g myusername) -v /path/to/mssql:/var/opt/mssql -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Configurare le autorizzazioni di archiviazione permanenti per i contenitori non radiceConfigure persistent storage permissions for non-root containers

Per consentire all'utente non radice di accedere ai file di database in volumi montati, assicurarsi che l'utente o il gruppo con cui viene eseguito il contenitore possa intervenire sull'archivio file permanente.To allow the non-root user to access DB files that are on mounted volumes, ensure that the user/group you run the container under can touch the persistent file storage.

È possibile ottenere la proprietà corrente dei file di database con questo comando.You can get the current ownership of the database files with this command.

ls -ll <database file dir>

Se SQL Server non ha accesso ai file di database persistenti, eseguire uno dei comandi seguenti.Run one of the following commands if SQL Server does not have access to persisted database files.

Concedere al gruppo radice l'accesso in lettura/scrittura ai file di databaseGrant the root group r/w access to the DB files

Concedere le autorizzazioni per il gruppo radice alle directory seguenti in modo che il contenitore di SQL Server non radice abbia accesso ai file di database.Grant the root group permissions to the following directories so that the non-root SQL Server container has access to database files.

chgroup -R 0 <database file dir>
chmod -R g=u <database file dir>

Impostare l'utente non radice come proprietario dei file.Set the non-root user as the owner of the files.

Può trattarsi dell'utente non radice predefinito o di qualsiasi altro utente non radice che si vuole specificare.This can be the default non-root user, or any other non-root user you’d like to specify. In questo esempio si imposta UID 10001 come utente non radice.In this example, we set UID 10001 as the non-root user.

chown -R 10001:0 <database file dir>

Modificare il percorso predefinito del fileChange the default file location

Aggiungere la variabile MSSQL_DATA_DIR per modificare la directory dei dati nel comando docker run, quindi montare un volume in quel percorso a cui ha accesso l'utente del contenitore.Add the MSSQL_DATA_DIR variable to change your data directory in your docker run command, then mount a volume to that location that your container’s user has access to.

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=MyStrongPassword" -e "MSSQL_DATA_DIR=/my/file/path" -v /my/host/path:/my/file/path -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest

Risoluzione dei problemiTroubleshooting

Le sezioni seguenti includono suggerimenti per la risoluzione dei problemi per l'esecuzione di SQL Server in contenitori.The following sections provide troubleshooting suggestions for running SQL Server in containers.

Errori per i comandi DockerDocker command errors

Se vengono visualizzati errori per i comandi docker, verificare che il servizio Docker sia in esecuzione e provare a eseguirlo con autorizzazioni elevate.If you get errors for any docker commands, make sure that the docker service is running, and try to run with elevated permissions.

Ad esempio, in Linux potrebbe essere visualizzato l'errore seguente quando si eseguono i comandi docker:For example, on Linux, you might get the following error when running docker commands:

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.If you get this error on Linux, try running the same commands prefaced with sudo. Se il tentativo non riesce, verificare che il servizio Docker sia in esecuzione e, se necessario, avviarlo.If that fails, verify the docker service is running, and start it if necessary.

sudo systemctl status docker
sudo systemctl start docker

In Windows assicurarsi di avviare PowerShell o il prompt dei comandi come amministratore.On Windows, verify that you are launching PowerShell or your command-prompt as an Administrator.

Errori di avvio del contenitore di SQL ServerSQL Server container startup errors

Se non è possibile eseguire il contenitore di SQL Server, provare i test seguenti:If the SQL Server container fails to run, try the following tests:

  • Se si riceve un errore del tipo 'Non è stato possibile creare l'endpoint NOME_CONTENITORE nel bridge di rete. Errore durante l'avvio del proxy: listen tcp 0.0.0.0:1433 bind: indirizzo già in uso.', si sta tentando di eseguire il mapping della porta del contenitore 1433 a una porta già in uso.If you get an error such as 'failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use.', then you are attempting to map the container port 1433 to a port that is already in use. Questo problema può verificarsi se si esegue SQL Server localmente nel computer host.This can happen if you're running SQL Server locally on the host machine. Può verificarsi anche se si avviano due contenitori di SQL Server e si tenta di eseguirne il mapping per entrambi alla stessa porta host.It can also happen if you start two SQL Server containers and try to map them both to the same host port. In tal caso, usare il parametro -p per eseguire il mapping della porta del contenitore 1433 a una porta host diversa.If this happens, use the -p parameter to map the container port 1433 to a different host port. Esempio:For example:
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-GA-ubuntu-16.04`.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04`.
  • Se si riceve un errore del tipo 'Autorizzazione negata durante il tentativo di connessione al socket del daemon Docker in unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30tdout=1&tail=all: dial unix /var/run/docker.sock: connect: autorizzazione negata' durante il tentativo di avviare un contenitore, aggiungere l'utente al gruppo Docker in Ubuntu.If you get an error such as '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' when trying to start a container, then add your user to the docker group in Ubuntu. Quindi disconnettersi e accedere di nuovo perché questa modifica influirà sulle nuove sessioni.Then logout and login again as this change will affect new sessions.

      usermod -aG docker $USER
    
  • Controllare se sono presenti messaggi di errore dal contenitore.Check to see if there are any error messages from container.

    docker logs e69e056c702d
    
  • Assicurarsi di soddisfare i requisiti minimi di memoria e disco specificati nella sezione dei prerequisiti dell'articolo di avvio rapido.Make sure that you meet the minimum memory and disk requirements specified in the prerequisites section of the quickstart article.

  • Se si usa un software di gestione dei contenitori, assicurarsi che supporti l'esecuzione come root dei processi dei contenitori.If you are using any container management software, make sure it supports container processes running as root. Il processo sqlservr nel contenitore viene eseguito come root.The sqlservr process in the container runs as root.

  • Esaminare i log di installazione e degli errori di SQL Server.Review the SQL Server setup and error logs.

Abilitare le acquisizioni di dumpEnable dump captures

Se il processo di SQL Server non riesce all'interno del contenitore, è necessario creare un nuovo contenitore con SYS_PTRACE abilitato.If the SQL Server process is failing inside the container, you should create a new container with SYS_PTRACE enabled. In questo modo viene aggiunta la funzionalità Linux per tracciare un processo, necessaria per la creazione di un file dump per un'eccezione.This adds the Linux capability to trace a process, which is necessary for creating a dump file on an exception. Il file dump può essere usato dal supporto tecnico per risolvere il problema.The dump file can be used by support to help troubleshoot the problem. Il comando docker run seguente abilita questa funzionalità.The following docker run command enables this capability.

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-GA-ubuntu-16.04

Errori di connessione a SQL ServerSQL Server connection failures

Se non è possibile connettersi all'istanza di SQL Server in esecuzione nel contenitore, provare i test seguenti:If you can't connect to the SQL Server instance running in your container, try the following tests:

  • Verificare che il contenitore di SQL Server sia in esecuzione esaminando la colonna STATUS dell'output di docker ps -a.Make sure that your SQL Server container is running by looking at the STATUS column of the docker ps -a output. In caso contrario, usare docker start <Container ID> per avviarlo.If not, use docker start <Container ID> to start it.

  • Se è stato eseguito il mapping a una porta host non predefinita (non 1433), assicurarsi di specificare la porta nella stringa di connessione.If you mapped to a non-default host port (not 1433), make sure you are specifying the port in your connection string. È possibile visualizzare il mapping delle porte nella colonna PORTS dell'output di docker ps -a.You can see your port mapping in the PORTS column of the docker ps -a output. Il comando seguente, ad esempio, connette sqlcmd a un contenitore in ascolto sulla porta 1401:For example, the following command connects sqlcmd to a container listening on port 1401:

    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 di MSSQL_SA_PASSWORD.If you used docker run with an existing mapped data volume or data volume container, SQL Server ignores the value of MSSQL_SA_PASSWORD. Viene invece usata la password dell'utente sa preconfigurata dai dati di SQL Server nel volume di dati o nel contenitore del volume di dati.Instead, the pre-configured SA user password is used from the SQL Server data in the data volume or data volume container. Verificare di usare la password sa associata ai dati da collegare.Verify that you are using the SA password associated with the data you're attaching to.

  • Esaminare i log di installazione e degli errori di SQL Server.Review the SQL Server setup and error logs.

Gruppi di disponibilità di SQL ServerSQL Server Availability Groups

Se si usa Docker con i gruppi di disponibilità di SQL Server, esistono due requisiti aggiuntivi.If you are using Docker with SQL Server Availability Groups, there are two additional requirements.

  • Eseguire il mapping della porta usata per le comunicazioni di replica (valore predefinito 5022).Map the port that is used for replica communication (default 5022). Ad esempio, specificare -p 5022:5022 come parte del comando docker run.For example, specify -p 5022:5022 as part of your docker run command.

  • Impostare in modo esplicito il nome host del contenitore con il parametro -h YOURHOSTNAME del comando docker run.Explicitly set the container host name with the -h YOURHOSTNAME parameter of the docker run command. Questo nome host viene usato quando si configura il gruppo di disponibilità.This host name is used when you configure your Availability Group. Se non viene specificato con -h, il valore predefinito è l'ID del contenitore.If you don't specify it with -h, it defaults to the container ID.

Log di installazione e degli errori di SQL ServerSQL Server setup and error logs

È possibile esaminare i log di installazione e degli errori di SQL Server in /var/opt/mssql/log.You can look at the SQL Server setup and error logs in /var/opt/mssql/log. Se il contenitore non è in esecuzione, avviare prima di tutto il contenitore.If the container is not running, first start the container. Usare quindi un prompt dei comandi interattivo per esaminare i log.Then use an interactive command-prompt to inspect the logs.

docker start e69e056c702d
docker exec -it e69e056c702d "bash"

Dalla sessione bash all'interno del contenitore eseguire i comandi seguenti:From the bash session inside your container, run the following commands:

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.If you mounted a host directory to /var/opt/mssql when you created your container, you can instead look in the log subdirectory on the mapped path on the host.

Passaggi successiviNext steps

Per informazioni introduttive sull'uso delle immagini del contenitore di SQL Server 2017 in Docker, vedere questo articolo di avvio rapido.Get started with SQL Server 2017 container images on Docker by going through the quickstart.

Nel repository GitHub mssql-docker sono inoltre disponibili risorse, feedback e documentazione su problemi noti.Also, see the mssql-docker GitHub repository for resources, feedback, and known issues.

Esplorare la disponibilità elevata per i contenitori di SQL ServerExplore high availability for SQL Server containers