Устранение неполадок контейнеров Docker SQL Server
Область применения: 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`.
Внимание
Пароль должен соответствовать политике паролей по умолчанию 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
Внимание
Пароль должен соответствовать политике паролей по умолчанию 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 Server 2017 в Docker можно найти в кратком руководстве.
- Сведения о начале работы с образами контейнеров с SQL Server 2019 в Docker можно найти в кратком руководстве.
- Приступая к работе с образами контейнеров SQL Server 2022 в Docker, ознакомьтесь с кратким руководством.
Примите участие в разработке документации по SQL
Знаете ли вы, что содержимое SQL можно изменить самостоятельно? Это не только улучшит нашу документацию, но и даст вам статус участника в создании этой страницы.
Дополнительные сведения см. в разделе Участие в работе над документацией по SQL Server.