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

In questo argomento si applica a: SìSQL Server (solo Linux)nonDatabase SQL di AzurenonAzure SQL Data WarehousenonParallel Data WarehouseTHIS TOPIC APPLIES TO: yesSQL Server (Linux only)noAzure SQL DatabasenoAzure SQL Data WarehousenoParallel Data Warehouse

In questo argomento viene illustrato come configurare e utilizzare il immagine contenitore mssql-server-linux con Docker.This topic explains how to configure and use the mssql-server-linux container image with Docker. Questa immagine è costituito da SQL Server in esecuzione in base a 16.04 Ubuntu Linux.This image consists of SQL Server running on Linux based on Ubuntu 16.04. E può essere utilizzato con il motore Docker 1.8 + in Linux o in Docker per Mac e Windows.It can be used with the Docker Engine 1.8+ on Linux or on Docker for Mac/Windows.

Nota

Questo argomento descrive in modo specifico utilizzando l'immagine mssql-server-linux.This topic specifically focuses on using the mssql-server-linux image. L'immagine di Windows non è coperto, ma sono disponibili ulteriori informazioni sul pagina Hub Docker mssql-server-windows.The Windows image is not covered, but you can learn more about it on the mssql-server-windows Docker Hub page.

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

Per effettuare il pull ed eseguire di immagine contenitore Docker per SQL Server 2017, seguire i prerequisiti e i passaggi nell'esercitazione introduttiva seguenti:To pull and run the Docker container image for SQL Server 2017, follow the prerequisites and steps in the following quick start tutorial:

Questa sezione di configurazione fornisce scenari di utilizzo aggiuntive nelle sezioni seguenti.This configuration topic provides additional usage scenarios in the sections below.

Eseguire le immagini contenitore di produzioneRun production container images

Esercitazione introduttiva nella sezione precedente, l'edizione Developer gratuita di SQL Server viene eseguito dall'Hub Docker.The quick start tutorial in the previous section runs the free Developer edition of SQL Server from Docker Hub. La maggior parte delle informazioni si applica comunque Se si desidera eseguire le immagini contenitore, ad esempio le edizioni Enterprise, Standard o Web di produzione.Most of the information still applies if you want to run production container images, such as Enterprise, Standard, or Web editions. Tuttavia, esistono alcune differenze descritte di seguito.However, there are a few differences that are outlined here.

  • È possibile utilizzare solo SQL Server in un ambiente di produzione, se si dispone di una licenza valida.You can only use SQL Server in a production environment if you have a valid license. È possibile ottenere una licenza di produzione SQL Server Express gratuita qui.You can obtain a free SQL Server Express production license here. Licenze di SQL Server Standard ed Enterprise Edition sono disponibili tramite Microsoft Volume Licensing.SQL Server Standard and Enterprise Edition licenses are available through Microsoft Volume Licensing.

  • Le immagini contenitore di SQL Server di produzione devono essere recuperate da Docker archivio.Production SQL Server container images must be pulled from Docker Store. Se si dispone già di uno, creare un account nell'archivio di Docker.If you don't already have one, create an account on Docker Store.

  • L'immagine contenitore sviluppatore nell'archivio di Docker può essere configurato per l'esecuzione anche le edizioni di produzione.The Developer container image on Docker Store can be configured to run the production editions as well. Utilizzare la procedura seguente per eseguire le edizioni di produzione:Use the following steps to run production editions:

    1. Innanzitutto, effettuare l'accesso all'id di docker dalla riga di comando.First, log in to your docker id from the command line.

      docker login
      
    2. Successivamente, è necessario ottenere lo sviluppatore gratuito immagine contenitore nell'archivio di Docker.Next, you need to obtain the free Developer container image on Docker Store. Passare a https://store.docker.com/images/mssql-server-linux, fare clic su procedere con l'estrazionee seguire le istruzioni.Go to https://store.docker.com/images/mssql-server-linux, click Proceed to Checkout, and follow the instructions.

    3. Esaminare i requisiti ed eseguire le procedure nel esercitazione introduttiva.Review the requirements and run procedures in the quick start tutorial. Tuttavia, vi sono due differenze.But there are two differences. È necessario effettuare il pull dell'immagine archivio/microsoft/mssql-server-linux:<-nome del tag> dall'archivio di Docker.You must pull the image store/microsoft/mssql-server-linux:<tag-name> from Docker Store. Ed è necessario specificare l'edizione di produzione con la MSSQL_PID variabile di ambiente.And you must specify your production edition with the MSSQL_PID environment variable. Nell'esempio seguente viene illustrato come eseguire l'ultima immagine contenitore 2017 di SQL Server 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 'SA_PASSWORD=<YourStrong!Passw0rd>' \
         -e 'MSSQL_PID=Enterprise' -p 1433:1433 \
         -d store/microsoft/mssql-server-linux:2017-latest
      
      docker run --name sqlenterprise `
         -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=<YourStrong!Passw0rd>" `
         -e "MSSQL_PID=Enterprise" -p 1433:1433 `
         -d "store/microsoft/mssql-server-linux:2017-latest"
      

      Importante

      Passando il valore Y alla variabile di ambiente ACCEPT_EULA e un valore di edition per MSSQL_PID, Esprimi si dispone di una licenza valida ed esistente per l'edizione e la versione di SQL Server che si desidera utilizzare.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. L'utente accetta inoltre l'utilizzo del software di SQL Server in esecuzione in un'immagine del contenitore Docker verrà regolato i termini 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 le impostazioni di configurazione 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.

Connettersi ed eseguire queryConnect and query

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

Strumenti di fuori del contenitoreTools outside the container

È possibile connettersi all'istanza di SQL Server nel computer Docker da qualsiasi strumento esterno macOS, Windows o Linux che supporta 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:

L'esempio seguente usa 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 è eseguito il mapping di una porta dell'host che non è il valore predefinito 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 è stato specificato -p 1400:1433 nel docker run comando, quindi connettersi in modo esplicito da specificare 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 CTP 2.0, il gli strumenti da riga di comando di SQL Server sono inclusi nell'immagine contenitore.Starting with SQL Server 2017 CTP 2.0, the SQL Server command-line tools are included in the container image. Se si collega all'immagine con un prompt dei comandi interattivi, è possibile eseguire gli strumenti in locale.If you attach to the image with an interactive command-prompt, you can run the tools locally.

  1. Utilizzare il docker exec -it comando 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

    Sempre necessario specificare l'id intero contenitore. È necessario solo specificare un numero di caratteri sufficiente per identificarla 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 pertanto essere sufficienti per utilizzare 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, la connessione in locale con sqlcmd.Once inside the container, connect locally with sqlcmd. Si noti che sqlcmd non è inclusa nel percorso per impostazione predefinita, pertanto è necessario 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. Al termine di sqlcmd, digitare exit.When finished with sqlcmd, type exit.

  4. Al termine di prompt dei comandi interattivo, digitare exit.When finished with the interactive command-prompt, type exit. Il contenitore continua a essere eseguito dopo la chiusura della shell bash interattivo.Your container continues to run after you exit the interactive bash shell.

Eseguire più contenitori di SQL ServerRun multiple SQL Server containers

Docker offre 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. Si tratta dell'approccio per scenari che richiedono più istanze di SQL Server nello stesso host.This is the approach for scenarios that require multiple instances of SQL Server on the same host. Ogni contenitore deve esporre stesso su una porta diversa.Each container must expose itself on a different port.

Nell'esempio seguente vengono creati due contenitori di SQL Server e ne esegue il mapping alle porte 1401 e 1402 nel computer host.The following example creates two SQL Server 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 microsoft/mssql-server-linux:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>' -p 1402:1433 -d microsoft/mssql-server-linux:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d microsoft/mssql-server-linux:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1402:1433 -d microsoft/mssql-server-linux:2017-latest

Sono ora presenti 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 utilizzando 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>"

I dati persistentiPersist your data

Le modifiche alla configurazione di SQL Server e i file di database sono persistenti nel contenitore, anche se si riavvia il contenitore 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, tutti gli elementi nel contenitore viene eliminato, tra cui 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. Nella sezione seguente viene illustrato come utilizzare volumi di dati per i file di database anche se i contenitori associati vengono eliminati.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 in come gestire i dati in contenitori di 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 è per montare un volume di dati nel contenitore di una directory nell'host.The first option is to mount a directory on your host as a data volume in your container. A tale scopo, utilizzare il docker run comando con il -v <host directory>:/var/opt/mssql flag.To do that, use the docker run command with the -v <host directory>:/var/opt/mssql flag. In questo modo i dati da ripristinare tra le esecuzioni di contenitore.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 microsoft/mssql-server-linux:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v <host directory>:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest

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

Mapping del volume host per Docker su Mac con SQL Server in Linux immagine non è supportato in questo momento.Host volume mapping for Docker on Mac with the SQL Server on Linux image is not supported at this time. Utilizzare contenitori di volumi di dati.Use data volume containers instead. Questa restrizione è specifica di /var/opt/mssql directory.This restriction is specific to the /var/opt/mssql directory. Durante la lettura da una directory montata di funziona correttamente.Reading from a mounted directory works fine. Ad esempio, è possibile montare una directory host utilizzando – v su 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 è utilizzare 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 invece di una directory host con il -v parametro.You can create a data volume container by specifying a volume name instead of a host directory with the -v parameter. L'esempio seguente crea 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 microsoft/mssql-server-linux:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1433:1433 -v sqlvolume:/var/opt/mssql -d microsoft/mssql-server-linux:2017-latest

Nota

Questa tecnica per la creazione di un volume di dati in modo implicito nel comando di esecuzione 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, utilizzare i passaggi espliciti descritti nella documentazione di Docker, 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 rimuovere questo contenitore, viene mantenuto il volume di dati.Even if you stop and remove this container, the data volume persists. È possibile visualizzare con il docker volume ls comando.You can view it with the docker volume ls command.

docker volume ls

Se si crea quindi un altro contenitore con lo stesso nome di volume, il nuovo contenitore Usa 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, utilizzare il docker volume rm comando.To remove a data volume container, use the docker volume rm command.

Avviso

Se si elimina il contenitore del volume di dati, i dati di SQL Server nel contenitore sono definitivamente eliminato.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 di contenitore, è inoltre possibile utilizzare backup di SQL Server standard e le tecniche di ripristino.In addition to these container techniques, you can also use standard SQL Server backup and restore techniques. È possibile utilizzare 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 ulteriori 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 i backup, assicurarsi di creare o copiare i file di backup di fuori del contenitore.If you do create backups, make sure to create or copy the backup files outside of the container. Se viene rimosso il contenitore, in caso contrario, vengono eliminati anche i file di backup.Otherwise, if the container is removed, the backup files are also deleted.

Eseguire i comandi in un contenitoreExecute commands in a container

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

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

docker ps

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

docker exec -ti <Container ID> /bin/bash

È ora possibile eseguire comandi, come se sono in esecuzione in terminal 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. Questo viene chiuso nella sessione interattiva di comandi, ma il contenitore resta in esecuzione.This exits in the interactive command session, but your container continues to run.

Copiare i 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 i 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

Eseguire un'immagine di contenitore specifica di SQL ServerRun a specific SQL Server container image

Esistono scenari in cui è possibile non usare l'immagine di contenitore più recente di SQL Server.There are scenarios where you might not want to use the latest SQL Server container image. Per eseguire un'immagine di contenitore specifica di SQL Server, attenersi alla procedura seguente:To run a specific SQL Server container image, use the following steps:

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

  2. Estrarre l'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 microsoft/mssql-server-linux:<image_tag>
    
  3. Per eseguire un nuovo contenitore con l'immagine, specificare il nome di tag nel docker run comando.To run a new container with that image, specify the tag name in the docker run command. Il comando seguente, sostituire <image_tag> con la versione che si desidera 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 microsoft/mssql-server-linux:<image_tag>
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1401:1433 -d microsoft/mssql-server-linux:<image_tag>
    

Questa procedura consente inoltre effettuare il downgrade di un contenitore esistente.These steps can also be used to downgrade an existing container. Ad esempio, è possibile ripristinare o effettuare il downgrade di un contenitore per la risoluzione dei problemi o test in esecuzione.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 utilizzare una tecnica di persistenza per la cartella di dati.To downgrade a running container, you must be using a persistence technique for the data folder. La stessa procedura descritta nel aggiornamento sezione, 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.

Importante

L'aggiornamento e il downgrade sono supportati solo tra RC1 e RC2 in questo momento.Upgrade and downgrade are only supported between RC1 and RC2 at this time.

Aggiornamento di SQL Server nei contenitoriUpgrade SQL Server in containers

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

docker pull microsoft/mssql-server-linux:<image_tag>

Aggiorna l'immagine di SQL Server per qualsiasi nuovi contenitori creati, ma non aggiorna SQL Server in tutti i contenitori 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 di contenitore più recente di SQL Server e la migrazione dei dati per il 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 che si utilizza uno del 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. Ciò consente di 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 docker stop comando.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 associato 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 utilizzare il tag specifico per l'aggiornamento di SQL Server.Make sure to use the specific tag for the your SQL Server upgrade. Il nuovo contenitore utilizza 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

    In questa fase di aggiornamento è supportato solo tra GA RC1 e RC2.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 vecchio contenitore con docker rm.Optionally, remove the old container with docker rm.

Risoluzione dei problemiTroubleshooting

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

Errori di comando di dockerDocker command errors

Se si verificano errori per qualsiasi docker comandi, assicurarsi che il servizio docker sia in esecuzione e provare a eseguire 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, è possibile che venga visualizzato l'errore seguente durante l'esecuzione di docker comandi: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 questo errore si verifica 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 problema persiste, verificare il servizio docker è in esecuzione e avviarlo, se necessario.If that fails, verify the docker service is running, and start it if necessary.

sudo systemctl status docker
sudo systemctl start docker

In Windows, verificare che si avvia PowerShell o prompt dei comandi come amministratore.On Windows, verify that you are launching PowerShell or your command-prompt as an Administrator.

Errori di avvio di SQL Server contenitoreSQL Server container startup errors

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

  • Se si verifica un errore, ad esempio ' non è riuscito a creare endpoint CONTAINER_NAME nel bridge di rete. Errore durante l'avvio proxy: associazione di ascolto tcp 0.0.0.0:1433: indirizzo già in uso.' , quindi si sta tentando di eseguire il mapping a una porta è già in uso la porta 1433 del contenitore.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. Questa situazione può verificarsi se si esegue SQL Server in locale nel computer host.This can happen if you're running SQL Server locally on the host machine. Può inoltre verificarsi se si avvia due contenitori di SQL Server e provare a eseguire il mapping di entrambi per la 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 questo caso, utilizzare il -p parametro per il contenitore porta 1433 per eseguire il mapping a una porta di host diverso.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 microsoft/mssql-server-linux:2017-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<YourStrong!Passw0rd>" -p 1400:1433 -d microsoft/mssql-server-linux:2017-latest`.
    
  • Verificare se sono presenti eventuali 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 requisiti sezione di questo argomento.Make sure that you meet the minimum memory and disk requirements specified in the Requirements section of this topic.

  • Se si utilizza qualsiasi software di gestione del contenitore, assicurarsi che supporta i processi di contenitore in esecuzione come radice.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 radice.The sqlservr process in the container runs as root.

  • Esaminare il i log di errore e il programma di installazione di SQL Server.Review the SQL Server setup and error logs.

Abilita 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. Aggiunge la funzionalità di Linux per tracciare un processo, che è necessario per la creazione di un file di dump di un'eccezione.This adds the Linux capability to trace a process, which is necessary for creating a dump file on an exception. Il file di dump possa essere usato dal supporto tecnico per risolvere il problema.The dump file can be used by support to help troubleshoot the problem. Il seguente comando docker run 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 microsoft/mssql-server-linux:2017-latest

Errori di connessione di SQL ServerSQL Server connection failures

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

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

  • Se è stato eseguito il mapping a una porta non predefinita host (non 1433), assicurarsi che si specifica 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 nel porte colonna il docker ps -a output.You can see your port mapping in the PORTS column of the docker ps -a output. Il comando seguente, ad esempio, si connette sqlcmd in 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 utilizzato docker run con un volume di dati sottoposti a mapping esistente o un contenitore di volumi di dati, 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. Al contrario, la password dell'utente dell'amministratore di sistema configurata in precedenza viene utilizzata dai dati di SQL Server nel volume di dati o il contenitore di volumi 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 che si sta utilizzando la password associata ai dati che per l'associazione.Verify that you are using the SA password associated with the data you're attaching to.

  • Esaminare il i log di errore e il programma di installazione di SQL Server.Review the SQL Server setup and error logs.

Gruppi di disponibilità SQL ServerSQL Server Availability Groups

Se si utilizza Docker con 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.

  • Associare la porta che viene utilizzata per la comunicazione di replica (impostazione predefinita 5022).Map the port that is used for replica communication (default 5022). Ad esempio, specificare -p 5022:5022 come parte del docker run comando.For example, specify -p 5022:5022 as part of your docker run command.

  • Impostare in modo esplicito il nome host del contenitore con il -h YOURHOSTNAME parametro del docker run comando.Explicitly set the container host name with the -h YOURHOSTNAME parameter of the docker run command. Questo nome host viene utilizzato quando si configura il gruppo di disponibilità.This host name is used when you configure your Availability Group. Se non si specifica 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 errore e il programma di installazione di SQL ServerSQL Server setup and error logs

È possibile esaminare il programma di installazione di SQL Server e il log degli errori /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 innanzitutto il contenitore.If the container is not running, first start the container. Utilizzare quindi un prompt dei comandi interattiva per esaminare i registri.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 è montato in una directory di host per /var/opt/mssql al momento della creazione del contenitore, è possibile invece esaminare il log sottodirectory 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

Introduzione a SQL Server 2017 le immagini contenitore Docker attraverso il esercitazione introduttiva.Get started with SQL Server 2017 container images on Docker by going through the quick start tutorial.

Vedere anche il repository GitHub mssql docker per le risorse, commenti e suggerimenti e problemi noti.Also, see the mssql-docker GitHub repository for resources, feedback, and known issues.