Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к:SQL Server в Linux
В этой статье рассматриваются распространенные ошибки, возникающие при развертывании и использовании контейнеров Docker в SQL Server, а также способы устранения этих ошибок.
Ошибки команды Docker
Если вы получаете ошибки, связанные с командами docker, убедитесь, что служба Docker запущена, и попробуйте выполнить запуск с повышенными привилегиями.
Например, при выполнении команд docker в Linux вы можете получить следующее сообщение об ошибке:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
Если вы получаете эту ошибку в Linux, попробуйте выполнить те же команды с префиксом sudo. Если этот способ также не сработает, убедитесь, что служба Docker запущена, и при необходимости запустите ее.
sudo systemctl status docker
sudo systemctl start docker
В Windows убедитесь, что запускаете PowerShell или командную строку от имени администратора.
Внимание
Переменная среды SA_PASSWORD является нерекомендуемой. Вместо этого используйте MSSQL_SA_PASSWORD.
Ошибки при запуске контейнера с SQL Server
Если запуск контейнера SQL Server завершился сбоем, попробуйте выполнить следующие проверки:
Если возникает ошибка, такая как
failed to create endpoint CONTAINER_NAME on network bridge. Error starting proxy: listen tcp 0.0.0.0:1433 bind: address already in use., вы пытаетесь сопоставить порт контейнера 1433 с уже используемым портом. Это может произойти в том случае, если вы запускаете SQL Server локально на хост-компьютере. Кроме того, такая ситуация возможна при запуске двух контейнеров с SQL Server и попытке сопоставить их с одним портом узла. В этом случае используйте параметр-p, чтобы сопоставить порт контейнера 1433 с другим портом узла. Например: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`.Внимание
Пароль должен соответствовать политике паролей по умолчанию SQL Server. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Пароли могут иметь длину до 128 символов. Рекомендуется использовать максимально длинные и сложные пароли.
Если при попытке запуска контейнера возникает ошибка
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, добавьте пользователя в группу docker в Ubuntu. После этого выйдите из системы и выполните вход снова, чтобы применить изменения к новым сеансам.usermod -aG docker $USERПроверьте наличие сообщений об ошибках от контейнера.
docker logs e69e056c702dУбедитесь, что ваша система отвечает требованиям к объему памяти и дисковому пространству, которые указаны в разделе Предварительные требования статьи с кратким руководством.
Если вы используете программное обеспечение для управления контейнером, убедитесь, что оно поддерживает привилегированное выполнение процессов контейнера. Процесс sqlservr в контейнере выполняется в привилегированном режиме.
Если контейнер Docker в SQL Server выполняет выход сразу после запуска, проверьте журналы Docker. Если вы используете PowerShell в Windows с помощью команды
docker run, используйте двойные кавычки вместо одинарных. В PowerShell Core используйте одинарные кавычки.Проверьте журналы установки и ошибок SQL Server.
Включение записи дампа
Если произошел сбой процесса SQL Server внутри контейнера, необходимо создать новый контейнер и включить для него SYS_PTRACE. При этом будет добавлена возможность отслеживания процесса в Linux, которая необходима для создания файла дампа при возникновении исключения. Файл дампа может использоваться службой поддержки в процессе устранения неполадок. Эту возможность можно включить с помощью следующей команды выполнения Docker.
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
При развертывании контейнера для SQL Server 2025 (17.x) или более поздней версии используется MSSQL_PID=DeveloperStandard для выпуска Standard Developer и MSSQL_PID=Developer для выпуска Enterprise Developer.
Внимание
Пароль должен соответствовать политике паролей по умолчанию SQL Server. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Пароли могут иметь длину до 128 символов. Рекомендуется использовать максимально длинные и сложные пароли.
Сбой подключений SQL Server
Если вам не удается подключиться к экземпляру SQL Server, запущенному в контейнере, попробуйте выполнить следующие проверки:
Убедитесь, что контейнер с SQL Server запущен. Для этого проверьте содержимое столбца STATUS (Состояние) в выходных данных команды
docker ps -a. При необходимости запустите его с помощью командыdocker start <Container ID>.Если вы сопоставляете с портом, отличным от порта узла по умолчанию (1433), обязательно укажите этот порт в строке подключения. Сопоставление порта можно проверить в столбце PORTS (Порты) в выходных данных команды
docker ps -a. Например, следующая команда подключает sqlcmd к контейнеру, прослушивающему порт 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>"Если вы использовали
docker runс существующим сопоставленным томом данных или контейнером тома данных, SQL Server игнорирует значениеMSSQL_SA_PASSWORD. Вместо этого предварительно настроенныйsaпароль учетной записи используется из данных SQL Server в контейнере тома данных или тома данных. Убедитесь, что вы используетеsaпароль, связанный с данными, к которым вы подключаетесь.Проверьте журналы установки и ошибок SQL Server.
Группы доступности SQL Server
Если вы используете Docker с группами доступности SQL Server, существует два дополнительных требования.
Выполните сопоставление порта, который используется для подключения к реплике (по умолчанию 5022). Например, укажите
-p 5022:5022в командеdocker run.Явно укажите имя узла контейнера с помощью параметра
-h YOURHOSTNAMEкомандыdocker run. Это имя узла используется при настройке группы доступности. Если оно не задано с помощью команды-h, по умолчанию в этом качестве используется идентификатор контейнера.
Журналы установки и ошибок SQL Server
Вы можете просмотреть журналы установки и ошибок SQL Server в папке /var/opt/mssql/log. Если контейнер не запущен, сначала запустите его. Затем проверьте журналы с помощью интерактивной командной строки. Идентификатор контейнера можно получить, выполнив команду docker ps.
docker start <ContainerID>
docker exec -it <ContainerID> "bash"
Из сеанса Bash внутри контейнера выполните следующие команды:
cd /var/opt/mssql/log
cat setup*.log
cat errorlog
Совет
Если вы подключили каталог хоста к каталогу /var/opt/mssql при создании контейнера, вместо этого можно выполнять поиск в подкаталоге log по сопоставленному пути на узле.
Выполнение команд в контейнере
Вы можете выполнять команды из работающего контейнера с помощью терминала узла.
Чтобы получить идентификатор контейнера, выполните следующую команду:
docker ps -a
Чтобы запустить терминал Bash в контейнере, выполните следующую команду:
docker exec -it <Container ID> /bin/bash
Теперь вы можете выполнять команды так, выполняли бы их из терминала внутри контейнера. По завершении введите exit. В этом случае завершается интерактивный сеанс команд, однако контейнер продолжает работать.
Связанный контент
Примите участие в разработке документации по SQL
Знаете ли вы, что содержимое SQL можно изменить самостоятельно? Это не только улучшит нашу документацию, но и даст вам статус участника в создании этой страницы.
Дополнительные сведения см. в разделе Редактирование документации Microsoft Learn.