Konfigurieren von SQL Server-Containerimages in DockerConfigure SQL Server container images on Docker

Gilt für: JaSQL Server (nur Linux) NeinAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

In diesem Artikel wird erläutert, wie Sie das mssql-server-linux-Containerimage mit Docker konfigurieren und verwenden.This article explains how to configure and use the mssql-server-linux container image with Docker.

Informationen zu weiteren Bereitstellungsszenarios finden Sie unter:For other deployment scenarios, see:

Dieses Image enthält SQL Server für Linux (basierend auf Ubuntu 16.04).This image consists of SQL Server running on Linux based on Ubuntu 16.04. Es kann unter Linux mit der Docker-Engine 1.8 und höher und in Docker für Mac bzw. Windows verwendet werden.It can be used with the Docker Engine 1.8+ on Linux or on Docker for Mac/Windows.

Hinweis

In diesem Artikel liegt der Fokus auf dem Image „mssql-sever-linux“.This article specifically focuses on using the mssql-server-linux image. Das Windows-Image wird hier zwar nicht behandelt, aber auf der Docker Hub-Seite zu „mssql-server-windows“ erhalten Sie weitere Informationen.The Windows image is not covered, but you can learn more about it on the mssql-server-windows Docker Hub page.

Wichtig

Bevor Sie sich für die Ausführung eines SQL Server-Containers für Anwendungsfälle in der Produktion entscheiden, lesen Sie unsere Richtlinie zur Unterstützung von SQL Server-Containern, um sicherzustellen, dass Sie mit einer unterstützten Konfiguration arbeiten.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.

Übertragen mithilfe von Pull und Ausführen von ContainerimagesPull and run the container image

Wenn Sie Docker-Containerimages für SQL Server 2017 und SQL Server 2019 herunterladen und ausführen möchten, sollten Sie zunächst die im folgenden Schnellstart beschriebenen Voraussetzungen schaffen und die Schritte ausführen: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:

In diesem Artikel zur Konfiguration werden zusätzliche Anwendungsfälle beschrieben.This configuration article provides additional usage scenarios in the following sections.

Ausführen von RHEL-basierten ContainerimagesRun RHEL-based container images

Die Dokumentation für SQL Server-Containerimages für Linux bezieht sich auf Ubuntu-basierte Container.The documentation for SQL Server Linux container images points to Ubuntu-based containers. Ab SQL Server 2019 können Sie auch RHEL-basierte Container (Red Hat Enterprise Linux) verwenden.Beginning with SQL Server 2019, you can use containers based on Red Hat Enterprise Linux (RHEL). Ändern Sie das Containerrepository in allen Docker-Befehlen von mcr.microsoft.com/mssql/server:2019-GA-ubuntu-16.04 in mcr.microsoft.com/mssql/rhel/server:2019-RC1.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.

Der folgende Befehl ruft beispielsweise den neuesten SQL Server 2019-Container ab, der RHEL verwendet: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

Hinweis

Ab der GA-Version von SQL Server 2019 ist das neueste RHEL-Containerimage weiterhin die RC1-Version.As of the GA release of SQL Server 2019, the latest RHEL container image is still the RC1 version. Diese Version ist nicht für die Verwendung in der Produktion bestimmt.This version is not meant for production use. Dieser Artikel wird aktualisiert, wenn ein neueres RHEL-Containerimage verfügbar wird.This article will be updated when a newer RHEL container image becomes available.

Ausführen von ProduktionscontainerimagesRun production container images

Im Schnellstart im vorherigen Abschnitt wird die kostenlose Developer Edition von SQL Server über Docker Hub ausgeführt.The quickstart in the previous section runs the free Developer edition of SQL Server from Docker Hub. Die meisten Angaben gelten weiterhin, wenn Sie Produktionscontainerimages wie für die Enterprise-, Standard- und Web-Edition ausführen möchten.Most of the information still applies if you want to run production container images, such as Enterprise, Standard, or Web editions. Es gibt jedoch einige Unterschiede, die im Folgenden erläutert werden.However, there are a few differences that are outlined here.

  • Sie können SQL Server nur in einer Produktionsumgebung verwenden, wenn Sie über eine gültige Lizenz verfügen.You can only use SQL Server in a production environment if you have a valid license. Sie können eine kostenlose SQL Server Express-Lizenz für die Produktion erwerben.You can obtain a free SQL Server Express production license here. Lizenzen für SQL Server Standard und SQL Server Enterprise sind über die Microsoft-Volumenlizenzierung verfügbar.SQL Server Standard and Enterprise Edition licenses are available through Microsoft Volume Licensing.

  • Das Developer-Containerimage kann so konfiguriert werden, dass auch die Produktionseditionen ausgeführt werden können.The Developer container image can be configured to run the production editions as well. Führen Sie Folgendes durch, um Produktionseditionen auszuführen:Use the following steps to run production editions:

Machen Sie sich im Schnellstart mit den Voraussetzungen vertraut, und führen Sie die dort aufgeführten Befehle aus.Review the requirements and run procedures in the quickstart. Sie müssen Ihre Produktionsedition mit der Umgebungsvariable MSSQL_PID angeben.You must specify your production edition with the MSSQL_PID environment variable. Im folgenden Beispiel wird die Ausführung des neuesten SQL Server 2017-Containerimages für die Enterprise Edition veranschaulicht: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"

Wichtig

Indem Sie den Wert Y an die Umgebungsvariable ACCEPT_EULA und einen Editionswert an MSSQL_PID übergeben, bestätigen Sie, dass Sie eine gültige und vorhandene Lizenz für die Edition und Version von SQL Server besitzen, die Sie verwenden möchten.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. Außerdem stimmen Sie den Nutzungsbedingungen für Ihre SQL Server-Lizenz zu, die für die Verwendung von SQL Server-Software gilt, die in einem Docker-Containerimage ausgeführt wird.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.

Hinweis

Eine vollständige Liste der möglichen Werte für MSSQL_PID finden Sie unter Konfigurieren von SQL Server-Einstellungen mit Umgebungsvariablen unter Linux.For a full list of possible values for MSSQL_PID, see Configure SQL Server settings with environment variables on Linux.

Herstellen einer Verbindung und Ausführen von AbfragenConnect and query

Sie können von innerhalb oder außerhalb des Containers eine Verbindung mit einer SQL Server-Instanz herstellen, die in einem Container ausgeführt wird, und Abfragen an diese senden.You can connect and query SQL Server in a container from either outside the container or from within the container. In den folgenden Abschnitten werden beide Szenarios erläutert.The following sections explain both scenarios.

Tools außerhalb des ContainersTools outside the container

Sie können über jedes externe Linux-, Windows- oder macOS-Tool, das SQL-Verbindungen unterstützt, eine Verbindung mit der SQL Server-Instanz auf Ihrem Docker-Computer herstellen.You can connect to the SQL Server instance on your Docker machine from any external Linux, Windows, or macOS tool that supports SQL connections. Folgende Tools werden häufig verwendet:Some common tools include:

Im folgenden Beispiel wird sqlcmd verwendet, um eine Verbindung mit einer SQL Server-Instanz herzustellen, die in einem Docker-Container ausgeführt wird.The following example uses sqlcmd to connect to SQL Server running in a Docker container. Die IP-Adresse in der Verbindungszeichenfolge ist die IP-Adresse des Hostcomputers, auf dem der Container ausgeführt wird.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>"

Wenn Sie eine Hostport zugeordnet haben, der nicht dem Standardport 1433 entspricht, fügen Sie diesen Port zur Verbindungszeichenfolge hinzu.If you mapped a host port that was not the default 1433, add that port to the connection string. Wenn Sie beispielsweise -p 1400:1433 in Ihrem docker run-Befehl angegeben haben, stellen Sie die Verbindung her, indem Sie explizit Port 1400 angeben.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>"

Tools innerhalb des ContainersTools inside the container

Ab SQL Server 2017 sind die SQL Server-Befehlszeilentools im Containerimage enthalten.Starting with SQL Server 2017, the SQL Server command-line tools are included in the container image. Wenn Sie diese mit einer interaktiven Befehlszeile an das Image anfügen, können Sie die Tools lokal ausführen.If you attach to the image with an interactive command-prompt, you can run the tools locally.

  1. Verwenden Sie den Befehl docker exec -it, um in Ihrem laufenden Container eine interaktive Bash-Shell zu starten.Use the docker exec -it command to start an interactive bash shell inside your running container. Im folgenden Beispiel entspricht e69e056c702d der Container-ID.In the following example e69e056c702d is the container ID.

    docker exec -it e69e056c702d "bash"
    

    Tipp

    Sie müssen nicht immer die gesamte Container-ID angeben. Sie müssen nur ausreichend Zeichen angeben, um diese eindeutig zu identifizieren.You don't always have to specify the entire container id. You only have to specify enough characters to uniquely identify it. In diesem Beispiel reicht es aus, e6 oder e69 anstelle der vollständigen ID zu verwenden.So in this example, it might be enough to use e6 or e69 rather than the full id.

  2. Stellen Sie eine lokale Verbindung mit „sqlcmd“ her.Once inside the container, connect locally with sqlcmd. Beachten Sie, dass sqlcmd nicht automatisch im Pfad vorhanden ist. Sie müssen daher selbst den vollständigen Pfand angeben.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. Wenn Sie mit sqlcmd fertig sind, geben Sie exit ein.When finished with sqlcmd, type exit.

  4. Wenn Sie mit der interaktiven Eingabeaufforderung fertig sind, geben Sie exit ein.When finished with the interactive command-prompt, type exit. Der Container wird auch nach dem Beenden der interaktiven Bash-Shell weiter ausgeführt.Your container continues to run after you exit the interactive bash shell.

Ausführen mehrerer SQL Server-ContainerRun multiple SQL Server containers

Docker ermöglicht die Ausführung mehrerer SQL Server-Container auf demselben Hostcomputer.Docker provides a way to run multiple SQL Server containers on the same host machine. Verwenden Sie diesen Ansatz, wenn mehrere SQL Server-Instanzen auf demselben Host benötigt werden.Use this approach for scenarios that require multiple instances of SQL Server on the same host. Jeder Container muss sich an einem anderen Port verfügbar machen.Each container must expose itself on a different port.

Im folgenden Beispiel werden zwei SQL Server 2017-Container erstellt und den Ports 1401 und 1402 auf dem Hostcomputer zugeordnet.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

Im folgenden Beispiel werden zwei SQL Server 2019-Container erstellt und den Ports 1401 und 1402 auf dem Hostcomputer zugeordnet.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

Nun gibt es zwei Instanzen von SQL Server, die in separaten Containern ausgeführt werden.Now there are two instances of SQL Server running in separate containers. Clients können eine Verbindung mit der jeweiligen SQL Server-Instanz herstellen, indem sie die IP-Adresse des Docker-Hosts und die Portnummer für den Container verwenden.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>"

Erstellen eines benutzerdefinierten ContainersCreate a customized container

Sie können ein eigenes Dockerfile erstellen, um einen benutzerdefinierten SQL Server-Container zu erstellen.It is possible to create your own Dockerfile to create a customized SQL Server container. Weitere Informationen finden Sie in dieser Demo, in der SQL Server und eine Node-Anwendung kombiniert werden.For more information, see a demo that combines SQL Server and a Node application. Wenn Sie ein eigenes Dockerfile erstellen, sollten Sie auf den Vordergrundprozess achten, da dieser die Lebensdauer des Containers bestimmt.If you do create your own Dockerfile, be aware of the foreground process, because this process controls the life of the container. Wenn dieser beendet wird, wird der Container heruntergefahren.If it exits, the container will shutdown. Wenn Sie beispielsweise ein Skript ausführen und SQL Server starten möchten, sollten Sie sicherstellen, dass der SQL Server-Prozess der Befehl ganz rechts ist.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. Alle anderen Befehle werden im Hintergrund ausgeführt.All other commands are run in the background. Dies wird mit dem folgenden Befehl in einem Dockerfile veranschaulicht:The following command illustrates this inside a Dockerfile:

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

Wenn Sie die Befehle im vorherigen Beispiel rückgängig gemacht haben, wird der Container heruntergefahren, wenn das Skript „do-my-sql-commands.sh“ abgeschlossen wird.If you reversed the commands in the previous example, the container would shutdown when the do-my-sql-commands.sh script completes.

Beibehalten von DatenPersist your data

Die SQL Server-Konfigurationsänderungen und -Datenbankdateien werden im Container beibehalten, auch wenn Sie den Container mit docker stop und docker start neu starten.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. Wenn Sie den Container jedoch mit docker rm entfernen, werden sämtliche Inhalte des Containers gelöscht, einschließlich SQL Server und Ihrer Datenbanken.However, if you remove the container with docker rm, everything in the container is deleted, including SQL Server and your databases. Im folgenden Abschnitt wird erläutert, wie Datenvolumes verwendet werden, um Ihre Datenbankdateien beizubehalten, auch wenn die zugeordneten Container gelöscht werden.The following section explains how to use data volumes to persist your database files even if the associated containers are deleted.

Wichtig

Für SQL Server ist es wichtig, sich mit der Datenpersistenz in Docker auseinanderzusetzen.For SQL Server, it is critical that you understand data persistence in Docker. Weitere Informationen finden Sie in der Docker-Dokumentation unter Verwalten von Daten in Docker-Containern.In addition to the discussion in this section, see Docker's documentation on how to manage data in Docker containers.

Einbinden eines Hostverzeichnisses als DatenvolumeMount a host directory as data volume

Die erste Option besteht darin, ein Verzeichnis auf dem Host als Datenvolume in Ihrem Container einzubinden.The first option is to mount a directory on your host as a data volume in your container. Verwenden Sie hierzu den Befehl docker run mit dem Flag -v <host directory>:/var/opt/mssql.To do that, use the docker run command with the -v <host directory>:/var/opt/mssql flag. Dadurch können die Daten zwischen den Containerausführungen wiederhergestellt werden.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

Mit dieser Methode können Sie die Dateien auch außerhalb von Docker auf dem Host freigeben und anzeigen.This technique also enables you to share and view the files on the host outside of Docker.

Wichtig

Die Hostvolumezuordnung für Docker unter Mac mit dem SQL Server für Linux-Image wird zurzeit nicht unterstützt.Host volume mapping for Docker on Mac with the SQL Server on Linux image is not supported at this time. Verwenden Sie stattdessen Datenvolumecontainer.Use data volume containers instead. Diese Einschränkung gilt nur für das Verzeichnis /var/opt/mssql.This restriction is specific to the /var/opt/mssql directory. Das Lesen aus einem bereitgestellten Verzeichnis funktioniert ordnungsgemäß.Reading from a mounted directory works fine. Sie können beispielsweise ein Hostverzeichnis mithilfe von-v auf einem Mac einbinden und eine Sicherung aus einer BAK-Datei wiederherstellen, die sich auf dem Host befindet.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.

Verwenden von DatenvolumecontainernUse data volume containers

Die zweite Option besteht in der Verwendung eines Datenvolumecontainers.The second option is to use a data volume container. Sie können einen Datenvolumecontainer erstellen, indem Sie mit dem Parameter -v einen Volumenamen anstelle eines Hostverzeichnisses angeben.You can create a data volume container by specifying a volume name instead of a host directory with the -v parameter. Im folgenden Beispiel wird ein freigegebenes Datenvolume mit dem Namen sqlvolume erstellt.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

Hinweis

Dieses Verfahren zum impliziten Erstellen eines Datenvolumes im run-Befehl funktioniert nicht mit älteren Docker-Versionen.This technique for implicitly creating a data volume in the run command does not work with older versions of Docker. Wenden Sie in diesem Fall die expliziten Schritte an, die in der Docker-Dokumentation zum Erstellen und Einbinden eines Datenvolumecontainers beschrieben werden.In that case, use the explicit steps outlined in the Docker documentation, Creating and mounting a data volume container.

Auch wenn Sie diesen Container anhalten und entfernen, bleibt das Datenvolume erhalten.Even if you stop and remove this container, the data volume persists. Sie können es mit dem Befehl docker volume ls anzeigen.You can view it with the docker volume ls command.

docker volume ls

Wenn Sie dann einen weiteren Container mit dem gleichen Volumenamen erstellen, verwendet der neue Container die gleichen SQL Server-Daten, die auch im Volume enthalten sind.If you then create another container with the same volume name, the new container uses the same SQL Server data contained in the volume.

Verwenden Sie den Befehl docker volume rm, um einen Datenvolumecontainer zu entfernen.To remove a data volume container, use the docker volume rm command.

Warnung

Wenn Sie den Datenvolumecontainer löschen, werden alle SQL Server-Daten im Container dauerhaft gelöscht.If you delete the data volume container, any SQL Server data in the container is permanently deleted.

Sichern und WiederherstellenBackup and restore

Zusätzlich zu diesen Containerverfahren können Sie auch SQL Server-Standardverfahren für die Sicherung und Wiederherstellung anwenden.In addition to these container techniques, you can also use standard SQL Server backup and restore techniques. Sie können Sicherungsdateien verwenden, um Ihre Daten zu schützen oder die Daten auf eine andere SQL Server-Instanz zu verschieben.You can use backup files to protect your data or to move the data to another SQL Server instance. Weitere Informationen finden Sie unter Sichern und Wiederherstellen von SQL Server-Datenbanken unter Linux.For more information, see Backup and restore SQL Server databases on Linux.

Warnung

Wenn Sie Sicherungen erstellen, stellen Sie sicher, dass die Sicherungsdateien außerhalb des Containers erstellt oder kopiert werden.If you do create backups, make sure to create or copy the backup files outside of the container. Andernfalls werden die Sicherungsdateien gelöscht, wenn der Container entfernt wird.Otherwise, if the container is removed, the backup files are also deleted.

Ausführen von Befehlen in einem ContainerExecute commands in a container

Wenn Sie bereits einen Container ausführen, können Sie über ein Hostterminal Befehle innerhalb des Containers ausführen.If you have a running container, you can execute commands within the container from a host terminal.

So rufen Sie die Container-ID ab:To get the container ID run:

docker ps

So starten Sie ein Bash-Terminal in der Containerausführung:To start a bash terminal in the container run:

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

Nun können Sie Befehle wie über das Terminal innerhalb des Containers ausführen.Now you can run commands as though you are running them at the terminal inside the container. Wenn Sie fertig sind, geben Sie exit ein.When finished, type exit. Dadurch wird die interaktive Befehlssitzung beendet, aber der Container wird weiter ausgeführt.This exits in the interactive command session, but your container continues to run.

Kopieren von Dateien aus einem ContainerCopy files from a container

Verwenden Sie den folgenden Befehl, um eine Datei aus dem Container zu kopieren:To copy a file out of the container, use the following command:

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

Beispiel:Example:

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

Kopieren von Dateien in einen ContainerCopy files into a container

Verwenden Sie den folgenden Befehl, um eine Datei in den Container zu kopieren:To copy a file into the container, use the following command:

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

Beispiel:Example:

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

Konfigurieren der ZeitzoneConfigure the timezone

Konfigurieren Sie die Umgebungsvariable TZ, um SQL Server mit einer bestimmten Zeitzone in einem Linux-Container auszuführen.To run SQL Server in a Linux container with a specific timezone, configure the TZ environment variable. Führen Sie den Befehl tzselect über eine Linux-Bash-Eingabeaufforderung aus, um den richtigen Zeitzonenwert zu ermitteln:To find the right timezone value, run the tzselect command from a Linux bash prompt:

tzselect

Nachdem Sie eine Zeitzone ausgewählt haben, zeigt tzselect in etwa folgende Ausgabe an: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.

Sie können diese Informationen verwenden, um die gleiche Umgebungsvariable in Ihrem Linux-Container festzulegen.You can use this information to set the same environment variable in your Linux container. Im folgenden Beispiel wird veranschaulicht, wie SQL Server in einem Container in der Zeitzone Americas/Los_Angeles ausgeführt wird: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

Ausführen eines bestimmten SQL Server-ContainerimagesRun a specific SQL Server container image

In manchen Fällen möchten Sie nicht das neueste SQL Server-Containerimage verwenden.There are scenarios where you might not want to use the latest SQL Server container image. Mithilfe der folgenden Schritte können Sie ein bestimmtes SQL Server-Containerimage ausführen:To run a specific SQL Server container image, use the following steps:

  1. Ermitteln Sie das Docker-Tag für das Release, das Sie verwenden möchten.Identify the Docker tag for the release you want to use. Die verfügbaren Tags finden Sie auf der Docker Hub-Seite zu „mssql-server-linux“.To view the available tags, see the mssql-server-linux Docker hub page.

  2. Laden Sie das SQL Server-Containerimage mit diesem Tag herunter.Pull the SQL Server container image with the tag. Wenn Sie das RC1-Image herunterladen möchten, ersetzen Sie <image_tag> im folgenden Befehl durch 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. Wenn Sie einen neuen Container mit diesem Image ausführen möchten, geben Sie den Tagnamen im Befehl docker run an.To run a new container with that image, specify the tag name in the docker run command. Ersetzen Sie im folgenden Befehl <image_tag> durch die Version, die Sie ausführen möchten.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>
    

Diese Schritte können auch zum Herabstufen eines vorhandenen Containers verwendet werden.These steps can also be used to downgrade an existing container. Sie können beispielsweise einen Rollback oder ein Downgrade für einen Container ausführen, um Probleme zu beheben oder Tests durchzuführen.For example, you might want to rollback or downgrade a running container for troubleshooting or testing. Zum Herabstufen eines ausgeführten Containers müssen Sie eine Persistenzmethode für den Datenordner verwenden.To downgrade a running container, you must be using a persistence technique for the data folder. Führen Sie die Schritte durch, die im Abschnitt zu Upgrades beschrieben werden, aber geben Sie den Tagnamen der älteren Version an, wenn Sie den neuen Container ausführen.Follow the same steps outlined in the upgrade section, but specify the tag name of the older version when you run the new container.

Überprüfen der ContainerversionCheck the container version

Führen Sie folgenden Befehl aus, um die SQL Server-Version in einem ausgeführten Docker-Container zu ermitteln.If you want to know the version of SQL Server in a running docker container, run the following command to display it. Ersetzen Sie <Container ID or name> durch die Zielcontainer-ID oder den Namen.Replace <Container ID or name> with the target container ID or name. Ersetzen Sie <YourStrong!Passw0rd> durch das SQL Server-Kennwort für die SA-Anmeldung.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'

Sie können auch die SQL Server-Version und die Buildnummer für ein Docker-Zielcontainerimage ermitteln.You can also identify the SQL Server version and build number for a target docker container image. Der folgende Befehl zeigt die SQL Server-Version und die Buildinformationen für das Image mcr.microsoft.com/mssql/server:2017-latest an.The following command displays the SQL Server version and build information for the mcr.microsoft.com/mssql/server:2017-latest image. Hierfür wird ein neuer Container mit der Umgebungsvariable PAL_PROGRAM_INFO=1 ausgeführt.It does this by running a new container with an environment variable PAL_PROGRAM_INFO=1. Der daraus resultierende Container wird sofort beendet und durch den Befehl docker rm entfernt.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

In den vorherigen Befehlen werden Versionsinformationen angezeigt, die der folgenden Ausgabe ähneln: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

Aktualisieren von SQL Server in ContainernUpgrade SQL Server in containers

Wenn Sie das Containerimage mit Docker aktualisieren möchten, müssen Sie zunächst das Tag für das Release des Upgrades ermitteln.To upgrade the container image with Docker, first identify the tag for the release for your upgrade. Rufen Sie diese Version mit dem Befehl docker pull aus der Registrierung ab:Pull this version from the registry with the docker pull command:

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

Dadurch wird das SQL Server-Image für neu erstellte Container aktualisiert. SQL Server wird jedoch nicht in ausgeführten Containern aktualisiert.This updates the SQL Server image for any new containers you create, but it does not update SQL Server in any running containers. Zu diesem Zweck müssen Sie einen neuen Container mit dem neuesten SQL Server-Containerimage erstellen und die Daten in diesen neuen Container migrieren.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. Stellen Sie sicher, dass Sie eine der Datenpersistenzmethoden für Ihren vorhandenen SQL Server-Container verwenden.Make sure you are using one of the data persistence techniques for your existing SQL Server container. So können Sie einen neuen Container mit den gleichen Daten starten.This enables you to start a new container with the same data.

  2. Halten Sie den SQL Server-Container mit dem Befehl docker stop an.Stop the SQL Server container with the docker stop command.

  3. Erstellen Sie mit docker run einen neuen SQL Server-Container, und geben Sie entweder ein zugeordnetes Hostverzeichnis oder einen Datenvolumecontainer an.Create a new SQL Server container with docker run and specify either a mapped host directory or a data volume container. Verwenden Sie das jeweilige Tag für Ihr SQL Server-Upgrade.Make sure to use the specific tag for your SQL Server upgrade. Der neue Container verwendet nun eine neue Version von SQL Server mit Ihren vorhandenen SQL Server-Daten.The new container now uses a new version of SQL Server with your existing SQL Server data.

    Wichtig

    Upgrades werden derzeit nur zwischen RC1, RC2 und der allgemein verfügbaren Version unterstützt.Upgrade is only supported between RC1, RC2, and GA at this time.

  4. Überprüfen Sie Ihre Datenbanken und Daten im neuen Container.Verify your databases and data in the new container.

  5. Entfernen Sie den alten Container optional mit docker rm.Optionally, remove the old container with docker rm.

Erstellen und Ausführen von SQL Server 2017-Containern ohne Root-BerechtigungBuild and run non-root SQL Server 2017 containers

Führen Sie die folgenden Schritte aus, um einen SQL Server 2017-Container zu erstellen, der als mssqlNicht-Root-Benutzer gestartet wird.Follow the steps below to build a SQL Server 2017 container that starts up as the mssql(non-root) user.

Hinweis

SQL Server 2019-Container werden automatisch als Container ohne Root-Berechtigung gestartet, sodass die folgenden Schritte nur für SQL Server 2017-Container gelten, die standardmäßig mit Root-Berechtigung gestartet werden.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. Laden Sie das Beispiel-Dockerfile für SQL Server-Container ohne Root-Berechtigung herunter, und speichern Sie sie als dockerfile.Download the sample dockerfile for non-root SQL Server Container and save it as dockerfile.

  2. Führen Sie den folgenden Befehl im Kontext des dockerfile-Verzeichnisses aus, um den SQL Server-Container ohne Root-Berechtigung zu erstellen: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. Starten Sie den Container.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

Hinweis

Das --cap-add SYS_PTRACE-Flag wird für SQL Server-Container ohne Root-Berechtigung benötigt, um Sicherungsdateien für die Problembehandlung zu erzeugen.The --cap-add SYS_PTRACE flag is required for non-root SQL Server containers to generate dumps for troubleshooting purposes.

  1. Überprüfen Sie, ob der Container als Nicht-Root-Benutzer ausgeführt wird:Check that the container is running as non-root user:

„docker exec“ in den Container.docker exec into the container.

docker exec -it sql1 bash

Führen Sie whoami aus, um den Benutzer zurückzugeben, der innerhalb des Containers ausgeführt wird.Run whoami which will return the user running within the container.

whoami

Ausführen eines Containers als anderer Nicht-Root-Benutzer auf dem HostRun container as a different non-root user on the host

Um den SQL Server-Container als anderer Nicht-Root-Benutzer auszuführen, fügen Sie dem Befehl „docker run“ das Flag „-u“ hinzu.To run the SQL Server container as a different non-root user, add the -u flag to the docker run command. Der Container ohne Root-Berechtigung hat die Einschränkung, dass er als Teil der Root-Gruppe ausgeführt werden muss, es sei denn, es wird ein Volume für „/var/opt/mssql“ bereitgestellt, auf das der Nicht-Root-Benutzer zugreifen kann.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. Die Root-Gruppe gewährt dem Nicht-Root-Benutzer keine zusätzlichen Root-Berechtigungen.The root group doesn’t grant any extra root permissions to the non-root user.

Ausführen als Benutzer mit einer UID 4000Run as a user with a UID 4000

Sie können SQL Server mit einer benutzerdefinierten UID starten.You can start SQL Server with a custom UID. Der folgende Befehl startet beispielsweise SQL Server mit der 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

Warnung

Stellen Sie sicher, dass der SQL Server-Container einen benannten Benutzer wie „mssql“ oder „root“ hat, denn anderenfalls kann SQLCMD nicht innerhalb des Containers ausgeführt werden.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. Sie können überprüfen, ob der SQL Server-Container als benannter Benutzer ausgeführt wird, indem Sie whoami innerhalb des Containers ausführen.You can check if the SQL Server container is running as a named user by running whoami within the container.

Ausführen des Containers ohne Root-Berechtigung als Root-BenutzerRun the non-root container as the root user

Sie können den Container ohne Root-Berechtigung ggf. als Root-Benutzer ausführen.You can run the non-root container as the root user if required. Dadurch würde der Container auch automatisch sämtliche Dateiberechtigungen erhalten, da er eine höhere Berechtigung hat.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

Ausführen als Benutzer auf Ihrem HostcomputerRun as a user on your host machine

Mit dem folgenden Befehl können Sie SQL Server mit einem vorhandenen Benutzer auf dem Hostcomputer starten: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

Ausführen als anderer Benutzer und GruppeRun as a different user and group

Sie können SQL Server mit einem benutzerdefinierten Benutzer oder einer benutzerdefinierten Gruppe starten.You can start SQL Server with a custom user and group. In diesem Beispiel verfügt das bereitgestellte Volume über Berechtigungen, die für den Benutzer oder die Gruppe auf dem Hostcomputer konfiguriert sind.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

Konfigurieren von persistenten Speicherberechtigungen für Container ohne Root-BerechtigungConfigure persistent storage permissions for non-root containers

Um dem Nicht-Root-Benutzer den Zugriff auf DB-Dateien zu ermöglichen, die sich auf bereitgestellten Volumes befinden, stellen Sie sicher, dass der Benutzer bzw. die Gruppe, unter der Sie den Container ausführen, auf den persistenten Dateispeicher zugreifen kann.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.

Mit diesem Befehl können Sie den aktuellen Besitzer der Datenbankdateien ermitteln.You can get the current ownership of the database files with this command.

ls -ll <database file dir>

Führen Sie einen der folgenden Befehle aus, wenn SQL Server keinen Zugriff auf persistente Datenbankdateien hat.Run one of the following commands if SQL Server does not have access to persisted database files.

Zuweisen der Berechtigungen für die Root-Gruppe zum Lesen und Schreiben der DB-DateienGrant the root group r/w access to the DB files

Erteilen Sie die Root-Gruppenberechtigungen für die folgenden Verzeichnisse, damit der SQL Server-Container ohne Root-Berechtigungen Zugriff auf Datenbankdateien hat.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>

Festlegen des Nicht-Root-Benutzers als Besitzer der DateienSet the non-root user as the owner of the files.

Dies kann der standardmäßig festgelegte Nicht-Root-Benutzer oder ein anderer Nicht-Root-Benutzer sein, den Sie angeben möchten.This can be the default non-root user, or any other non-root user you’d like to specify. In diesem Beispiel haben wir die UID 10001 als Nicht-Root-Benutzer festgelegt.In this example, we set UID 10001 as the non-root user.

chown -R 10001:0 <database file dir>

Ändern des Standardspeicherorts der DateiChange the default file location

Fügen Sie die Variable MSSQL_DATA_DIR hinzu, um Ihr Datenverzeichnis in Ihrem docker run-Befehl zu ändern, und stellen Sie dann ein Volume an dem Speicherort bereit, auf den der Benutzer Ihres Containers Zugriff hat.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

ProblembehandlungTroubleshooting

In den folgenden Abschnitten finden Sie Vorschläge zur Problembehandlung bei der Ausführung von SQL Server in Containern.The following sections provide troubleshooting suggestions for running SQL Server in containers.

Fehler bei Docker-BefehlenDocker command errors

Wenn Fehler bei docker-Befehlen auftreten, sollten Sie sicherstellen, dass der Docker-Dienst ausgeführt wird und versuchen, diesen mit erhöhten Berechtigungen auszuführen.If you get errors for any docker commands, make sure that the docker service is running, and try to run with elevated permissions.

Unter Linux kann beispielsweise folgender Fehler auftreten, wenn Sie docker-Befehle ausführen: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?

Wenn dieser Fehler unter Linux auftritt, versuchen Sie, diese Befehle mit sudo auszuführen.If you get this error on Linux, try running the same commands prefaced with sudo. Wenn dieser Versuch fehlschlägt, sollten Sie überprüfen, ob der Docker-Dienst ausgeführt wird und diesen ggf. starten.If that fails, verify the docker service is running, and start it if necessary.

sudo systemctl status docker
sudo systemctl start docker

Vergewissern Sie sich unter Windows, dass Sie PowerShell oder die Eingabeaufforderung als Administrator starten.On Windows, verify that you are launching PowerShell or your command-prompt as an Administrator.

Startfehler bei SQL Server-ContainernSQL Server container startup errors

Wenn der SQL Server-Container nicht ausgeführt werden kann, versuchen Sie Folgendes:If the SQL Server container fails to run, try the following tests:

  • Wenn ein Fehler wie failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use. (Der Endpunkt CONTAINERNAME konnte auf der Netzwerkbrücke nicht erstellt werden. Fehler beim Starten des Proxy: listen tcp 0.0.0.0:1433 bind: Adresse wird bereits verwendet.) auftritt, liegt das daran, dass Sie versuchen, den Containerport 1433 einem Port zuzuordnen, der bereits verwendet wird.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. Dieser Fall kann eintreten, wenn Sie SQL Server lokal auf dem Hostcomputer ausführen.This can happen if you're running SQL Server locally on the host machine. Dieser Fall kann außerdem eintreten, wenn Sie zwei SQL Server-Container starten und versuchen, diese demselben Hostport zuzuordnen.It can also happen if you start two SQL Server containers and try to map them both to the same host port. Verwenden Sie in diesem Fall den Parameter -p, um den Containerport 1433 einem anderen Hostport zuzuordnen.If this happens, use the -p parameter to map the container port 1433 to a different host port. Beispiel: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`.
  • Wenn beispielsweise eine Fehlermeldung wie Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30tdout=1&tail=all: dial unix /var/run/docker.sock: connect: permission denied (Berechtigung während des Verbindungsversuchs mit dem Docker-Daemonsocket unter unix:///var/run/docker.sock verweigert: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.30tdout=1&tail=all: dial unix /var/run/docker.sock: connect: Berechtigung verweigert.) angezeigt wird, wenn Sie versuchen, einen Container zu starten, sollten Sie Ihren Benutzer zur Docker-Gruppe in Ubuntu hinzufügen.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. Melden Sie sich ab und wieder an, da sich diese Änderung auf neue Sitzungen auswirkt.Then logout and login again as this change will affect new sessions.

      usermod -aG docker $USER
    
  • Überprüfen Sie, ob Fehlermeldungen in Bezug auf den Container vorhanden sind.Check to see if there are any error messages from container.

    docker logs e69e056c702d
    
  • Stellen Sie sicher, dass die Mindestanforderungen für den Arbeitsspeicher und den Datenträger erfüllt werden, die im Abschnitt Voraussetzungen des Schnellstartartikels aufgelistet werden.Make sure that you meet the minimum memory and disk requirements specified in the prerequisites section of the quickstart article.

  • Wenn Sie Containerverwaltungssoftware verwenden, müssen Sie sicherstellen, dass diese die Ausführung von Containerprozessen als Root unterstützt.If you are using any container management software, make sure it supports container processes running as root. Der Prozess „sqlservr“ im Container wird als Root ausgeführt.The sqlservr process in the container runs as root.

  • Überprüfen Sie die Setup- und Fehlerprotokolle für SQL Server.Review the SQL Server setup and error logs.

Aktivieren der SicherungserfassungEnable dump captures

Wenn der SQL Server-Prozess innerhalb des Containers fehlschlägt, sollten Sie einen neuen Container erstellen, bei dem SYS_PTRACE aktiviert ist.If the SQL Server process is failing inside the container, you should create a new container with SYS_PTRACE enabled. Dadurch kann die Linux-Funktion zur Nachverfolgung eines Prozesses genutzt werden, die für das Erstellen einer Sicherungsdatei für eine Ausnahme erforderlich ist.This adds the Linux capability to trace a process, which is necessary for creating a dump file on an exception. Die Sicherungsdatei kann vom Support genutzt werden, um das Problem zu beheben.The dump file can be used by support to help troubleshoot the problem. Die Funktion wird mit folgendem docker run-Befehl aktiviert.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

SQL Server-VerbindungsfehlerSQL Server connection failures

Wenn Sie keine Verbindung mit der SQL Server-Instanz herstellen können, die in Ihrem Container ausgeführt wird, versuchen Sie Folgendes:If you can't connect to the SQL Server instance running in your container, try the following tests:

  • Stellen Sie sicher, dass Ihr SQL Server-Container ausgeführt wird, indem Sie die Spalte STATUS der Ausgabe von docker ps -a überprüfen.Make sure that your SQL Server container is running by looking at the STATUS column of the docker ps -a output. Starten Sie ihn andernfalls mit docker start <Container ID>.If not, use docker start <Container ID> to start it.

  • Wenn Sie den Container nicht dem Standardhostport 1433 zugeordnet haben, müssen Sie den Port in der Verbindungszeichenfolge angeben.If you mapped to a non-default host port (not 1433), make sure you are specifying the port in your connection string. Die Portzuordnung ist in der Spalte PORTS der Ausgabe von docker ps -a ersichtlich.You can see your port mapping in the PORTS column of the docker ps -a output. Folgender Befehl verbindet sqlcmd beispielsweise mit einem Container, der Port 1401 lauscht: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>"
    
  • Wenn Sie docker run mit einem vorhandenen zugeordneten Datenvolume oder Datenvolumecontainer verwendet haben, ignoriert SQL Server den Wert von 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. Stattdessen wird das vorkonfigurierte SA-Benutzerkennwort aus den SQL Server-Daten im Datenvolume oder Datenvolumecontainer verwendet.Instead, the pre-configured SA user password is used from the SQL Server data in the data volume or data volume container. Vergewissern Sie sich, dass Sie das SA-Kennwort verwenden, das den Daten zugeordnet ist, an die Sie anfügen.Verify that you are using the SA password associated with the data you're attaching to.

  • Überprüfen Sie die Setup- und Fehlerprotokolle für SQL Server.Review the SQL Server setup and error logs.

SQL Server-VerfügbarkeitsgruppenSQL Server Availability Groups

Wenn Sie Docker mit SQL Server-Verfügbarkeitsgruppen verwenden, gibt es zwei zusätzliche Voraussetzungen.If you are using Docker with SQL Server Availability Groups, there are two additional requirements.

  • Ordnen Sie den Port zu, der für die Replikatkommunikation verwendet wird (standardmäßig 5022).Map the port that is used for replica communication (default 5022). Geben Sie in Ihrem docker run-Befehl beispielsweise -p 5022:5022 an.For example, specify -p 5022:5022 as part of your docker run command.

  • Legen Sie den Containerhostnamen mit dem Parameter -h YOURHOSTNAME des Befehls docker run explizit fest.Explicitly set the container host name with the -h YOURHOSTNAME parameter of the docker run command. Dieser Hostname wird verwendet, wenn Sie die Verfügbarkeitsgruppe konfigurieren.This host name is used when you configure your Availability Group. Wenn Sie ihn nicht mit -h angeben, wird standardmäßig die Container-ID verwendet.If you don't specify it with -h, it defaults to the container ID.

Setup- und Fehlerprotokolle für SQL ServerSQL Server setup and error logs

Sie finden Sie Setup- und Fehlerprotokolle für SQL Server unter /var/opt/mssql/log.You can look at the SQL Server setup and error logs in /var/opt/mssql/log. Wenn der Container nicht ausgeführt wird, starten Sie diesen zunächst.If the container is not running, first start the container. Verwenden Sie dann eine interaktive Eingabeaufforderung, um die Protokolle zu überprüfen.Then use an interactive command-prompt to inspect the logs.

docker start e69e056c702d
docker exec -it e69e056c702d "bash"

Führen Sie folgende Befehle über die Bash-Sitzung in Ihrem Container aus:From the bash session inside your container, run the following commands:

cd /var/opt/mssql/log
cat setup*.log
cat errorlog

Tipp

Wenn Sie bei der Erstellung des Containers ein Hostverzeichnis in /var/opt/mssql eingebunden haben, können Sie stattdessen im Unterverzeichnis log des auf dem Host zugeordneten Pfads suchen.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.

Nächste SchritteNext steps

Der Schnellstart erleichtert Ihnen den Einstieg in die Verwendung von SQL Server 2017-Containerimages in Docker.Get started with SQL Server 2017 container images on Docker by going through the quickstart.

Ressourcen, Feedback und Informationen über bekannte Probleme finden Sie im GitHub-Repository „mssql-docker“.Also, see the mssql-docker GitHub repository for resources, feedback, and known issues.

Hochverfügbarkeit für SQL Server-ContainerExplore high availability for SQL Server containers