Sdílet prostřednictvím


Řešení potíží s kontejnery Dockeru SQL Serveru

platí pro:SQL Server – Linux

Tento článek se zabývá běžnými chybami při nasazování a používání kontejnerů Dockeru SQL Serveru a poskytuje techniky řešení potíží, které vám pomůžou tento problém vyřešit.

Chyby příkazů Dockeru

Pokud dojde k chybám u všech docker příkazů, ujistěte se, že je spuštěná služba Dockeru, a pokuste se spustit se zvýšenými oprávněními.

Například v Linuxu se při spouštění docker příkazů může zobrazit následující chyba:

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

Pokud se zobrazí tato chyba v Linuxu, zkuste spustit stejné příkazy, které sudojsou před sebou . Pokud se to nezdaří, ověřte, že je služba Docker spuštěná, a v případě potřeby ji spusťte.

sudo systemctl status docker
sudo systemctl start docker

Ve Windows ověřte, že spouštíte PowerShell nebo příkazový řádek jako správce.

Důležité

Proměnná prostředí SA_PASSWORD se již nepoužívá. Místo toho použijte MSSQL_SA_PASSWORD.

Chyby při spuštění kontejneru SQL Serveru

Pokud se kontejner SQL Serveru nepodaří spustit, vyzkoušejte následující testy:

  • Pokud se zobrazí například chyba failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use., pokoušíte se namapovat port kontejneru 1433 na port, který se už používá. K tomu může dojít, pokud používáte SQL Server místně na hostitelském počítači. Může k tomu dojít také v případě, že spustíte dva kontejnery SQL Serveru a pokusíte se je namapovat na stejný port hostitele. V takovém případě pomocí -p parametru namapujte port kontejneru 1433 na jiný port hostitele. Například:

    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2017-latest`.
    
    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2019-latest`.
    
    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2022-latest`.
    
    docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -p 1400:1433 -d mcr.microsoft.com/mssql/server:2025-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2025-latest`.
    
    docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 1400:1433 -d mcr.microsoft.com/mssql/server:2025-latest`.
    

    Upozornění

    Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

  • Pokud se zobrazí chyba, například 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 při pokusu o spuštění kontejneru, přidejte uživatele do skupiny Dockeru v Ubuntu. Potom se znovu odhlaste a přihlaste se, protože tato změna ovlivní nové relace.

    usermod -aG docker $USER
    
  • Zkontrolujte, jestli v kontejneru nejsou nějaké chybové zprávy.

    docker logs e69e056c702d
    
  • Ujistěte se, že splňujete minimální požadavky na paměť a disk uvedené v části Požadavky článku rychlého startu.

  • Pokud používáte jakýkoli software pro správu kontejnerů, ujistěte se, že podporuje procesy kontejnerů spuštěné jako root. Proces sqlservr v kontejneru běží jako kořen.

  • Pokud se kontejner Dockeru SQL Serveru okamžitě po spuštění ukončí, zkontrolujte protokoly Dockeru. Pokud používáte PowerShell ve Windows s příkazem docker run , použijte místo jednoduchých uvozovek dvojité uvozovky. V PowerShellu Core použijte jednoduché uvozovky.

  • Zkontrolujte instalační a chybové protokoly SQL Serveru.

Povolení zachytávání výpisů paměti

Pokud proces SQL Serveru v kontejneru selže, měli byste vytvořit nový kontejner s povoleným SYS_PTRACE . Tím se přidá funkce Linuxu pro trasování procesu, která je nezbytná pro vytvoření souboru s výpisem paměti při výskytu výjimky. Soubor s výpisem paměti může pomoci s řešením tohoto problému. Následující příkaz docker run tuto funkci povolí.

docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2017-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2022-latest
docker run -e 'ACCEPT_EULA=Y' -e 'MSSQL_SA_PASSWORD=<password>' -e 'MSSQL_PID=Developer' --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2025-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2025-latest
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 1401:1433 -d mcr.microsoft.com/mssql/server:2025-latest

Když nasadíte kontejner pro SQL Server 2025 (17.x) nebo novější verzi, použijte MSSQL_PID=DeveloperStandard edici Standard Developer a MSSQL_PID=Developer edici Enterprise Developer.

Upozornění

Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru . Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.

Selhání připojení k SQL Serveru

Pokud se nemůžete připojit k instanci SQL Serveru spuštěné v kontejneru, vyzkoušejte následující testy:

  • Zkontrolujte, jestli je kontejner SQL Serveru spuštěný, a to tak, že se podíváte na sloupec STATUS výstupu docker ps -a . Pokud ne, použijte docker start <Container ID> ho ke spuštění.

  • Pokud jste namapovali na jiný než výchozí port hostitele (ne 1433), ujistěte se, že zadáváte port v připojovací řetězec. Mapování portů můžete zobrazit ve sloupci PORTY výstupu docker ps -a . Například následující příkaz připojí sqlcmd ke kontejneru naslouchajícímu na portu 1401:

    sqlcmd -S 10.3.2.4,1401 -U sa -P '<YourPassword>'
    
    sqlcmd -S 10.3.2.4,1401 -U sa -P "<YourPassword>"
    
    sqlcmd -S 10.3.2.4,1401 -U sa -P "<YourPassword>"
    
  • Pokud jste použili docker run s existujícím mapovaným datovým svazkem nebo kontejnerem datového MSSQL_SA_PASSWORDsvazku, SQL Server ignoruje hodnotu . Místo toho se předkonfigurované sa heslo účtu používá z dat SQL Serveru v datovém svazku nebo kontejneru datového svazku. Ověřte, že používáte sa heslo přidružené k datům, ke kterým se připojujete.

  • Zkontrolujte instalační a chybové protokoly SQL Serveru.

Skupiny dostupnosti SQL Serveru

Pokud používáte Docker se skupinami dostupnosti SQL Serveru, existují dva další požadavky.

  • Namapujte port, který se používá pro komunikaci repliky (výchozí 5022). Můžete například zadat -p 5022:5022 jako součást docker run příkazu.

  • Explicitně nastavte název hostitele kontejneru -h YOURHOSTNAME pomocí parametru docker run příkazu. Tento název hostitele se používá při konfiguraci skupiny dostupnosti. Pokud ho -hnezadáte, nastaví se jako výchozí ID kontejneru.

Nastavení SQL Serveru a protokoly chyb

V souboru /var/opt/mssql/log se můžete podívat na instalační a chybové protokoly SQL Serveru. Pokud kontejner není spuštěný, nejprve kontejner spusťte. Pak pomocí interaktivního příkazového řádku zkontrolujte protokoly. ID kontejneru můžete získat spuštěním příkazu docker ps.

docker start <ContainerID>
docker exec -it <ContainerID> "bash"

Z relace Bash uvnitř kontejneru spusťte následující příkazy:

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

Návod

Pokud jste při vytváření kontejneru připojili adresář hostitele k /var/opt/mssql, můžete místo toho vyhledat složku logů na mapované cestě na hostiteli.

Spouštění příkazů v kontejneru

Pokud máte spuštěný kontejner, můžete v kontejneru spouštět příkazy z hostitelského terminálu.

Spuštění ID kontejneru:

docker ps -a

Spuštění terminálu Bash v kontejneru:

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

Teď můžete spouštět příkazy, jako kdybyste je spouštěli v terminálu uvnitř kontejneru. Po dokončení zadejte exit. Tím se ukončí interaktivní relace příkazů, ale kontejner se bude dál spouštět.

Přispějte k dokumentaci SQL

Věděli jste, že obsah SQL můžete upravovat sami? Pokud to uděláte, nejen že vám pomůžete vylepšit naši dokumentaci, ale také jste získali kredit jako přispěvatel na stránku.

Další informace naleznete v Upravit dokumentaci Microsoft Learn.