Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: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 или командную строку от имени администратора.
Important
Переменная среды 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`.Caution
Пароль должен соответствовать политике паролей по умолчанию 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Убедитесь, что ваша система отвечает требованиям к объему памяти и дисковому пространству, которые указаны в разделе Предварительные требования статьи с кратким руководством.
Если вы используете любое ПО для управления контейнерами, убедитесь, что оно поддерживает запуск процессов контейнера от имени root. Процесс sqlservr в контейнере выполняется от имени пользователя root.
Если контейнер SQL Server в Docker сразу завершается после запуска, проверьте логи 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
Caution
Пароль должен соответствовать политике паролей по умолчанию 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
Tip
Если при создании контейнера вы смонтировали каталог хоста в /var/opt/mssql, вместо этого можно посмотреть подкаталог log по соответствующему пути на хосте.
Выполнение команд в контейнере
Вы можете выполнять команды из работающего контейнера с помощью терминала узла.
Чтобы получить идентификатор контейнера, выполните следующую команду:
docker ps -a
Чтобы запустить терминал Bash в контейнере, выполните следующую команду:
docker exec -it <Container ID> /bin/bash
Теперь вы можете выполнять команды так, выполняли бы их из терминала внутри контейнера. По завершении введите exit. В этом случае завершается интерактивный сеанс команд, однако контейнер продолжает работать.
Связанный контент
Примите участие в разработке документации по SQL
Знаете ли вы, что содержимое SQL можно изменить самостоятельно? При этом вы не только помогаете улучшить нашу документацию, но и получаете признание в качестве участника страницы.
Дополнительные сведения см. в разделе Редактирование документации Microsoft Learn.