SQL Server Express не запускается при запуске контейнера Docker (Windows)

Что я сделал:

  • Я установил Docker Desktop для Windows в Windows 10 Anniversary Update.
  • Я вытащил образ microsoft/windowsservercore
  • Я установил SQL Server Express 2016 в работающий контейнер A этого образа.
  • Я вышел из контейнера А
  • Я передал контейнер A новому изображению sqlimage
  • Я запускаю новый контейнер B с новым sqlimage

Моя проблема:
В контейнере A SQL Server работает правильно.
В контейнере B не удалось запустить SQL Server.
Когда я пытаюсь запустить службу с net start "SQL Server (INST)" я получаю следующую ошибку:
Произошла ошибка конкретной службы: 5.

В чем разница между этими двумя контейнерами?


person Manuel Reinhart    schedule 20.10.2016    source источник


Ответы (2)


У Microsoft есть собственный образ в Docker Hub с установленным SQL Server 2016 Express: microsoft/mssql-server-2016-express-windows. Вы можете использовать его напрямую или расширить его с помощью собственного Dockerfile, который запускается:

FROM microsoft/mssql-server-2016-express-windows

Если вы предпочитаете создавать свои собственные, вы можете увидеть, как Microsoft делает это, из их Dockerfile — и если вы проверите скрипт PowerShell в инструкции CMD, он запускает SQL Express следующим образом:

start-service MSSQL`$SQLEXPRESS

Когда вы используете docker commit для сохранения измененного образа, вы не меняете CMD, который Docker будет использовать при запуске нового контейнера из образа, поэтому вам лучше сборка образа из Dockerfile.

Что касается того, почему служба не запускается в вашем контейнере B, это зависит от шагов, которые вы предприняли для установки SQL, и параметров, которые вы использовали при запуске контейнеров.

person Elton Stoneman    schedule 20.10.2016
comment
Я попытался запустить службу с помощью powershell и start-service. Он не запускается. Я хочу избежать загрузки и установки sqlserver при создании контейнера, потому что я хочу запустить много контейнеров, а это займет слишком много времени. Я написал ответ с шагами, которые я предпринял для установки сервера sql. Спасибо! - person Manuel Reinhart; 20.10.2016
comment
Вы можете написать Dockerfile, который содержит RUN инструкции по загрузке установщика SQL Server и запуску установки. Эти вещи происходят только тогда, когда вы используете docker build для создания изображения. Вы можете использовать docker run для запуска многих контейнеров из одного и того же образа, и они не повторяют никаких инструкций по сборке из Dockerfile — только инструкцию CMD, которая сообщает Docker, что делать при запуске контейнеров. - person Elton Stoneman; 20.10.2016
comment
Наконец, я решил это, используя образ microsoft/mssql-server-2016-express-windows, и добавил к нему свое приложение. - person Manuel Reinhart; 21.10.2016

Чтобы установить SQL Server, я запускаю:

SETUP.exe /ConfigurationFile=ConfigurationFile.ini  /SAPWD="XXXXXXX" /IACCEPTSQLSERVERLICENSETERMS

Конфигурационный файл:

[OPTIONS]
ACTION="Install"
ROLE="AllFeatures_WithDefaults"
ENU="True"
Setup will not display any user interface. 
QUIET="True"
QUIETSIMPLE="False"
UpdateEnabled="True"
ERRORREPORTING="False"
USEMICROSOFTUPDATE="True"
FEATURES=SQLENGINE,REPLICATION,SNAC_SDK
UpdateSource="MU"
HELP="False"
INDICATEPROGRESS="True"
X86="False"
INSTALLSHAREDDIR="C:\Program Files\Microsoft SQL Server"
INSTANCENAME="XAM"
SQMREPORTING="False"
INSTANCEID="XAM"
INSTANCEDIR="C:\Program Files\Microsoft SQL Server"
AGTSVCACCOUNT="NT-AUTORITÄT\NETZWERKDIENST"
AGTSVCSTARTUPTYPE="Disabled"
COMMFABRICPORT="0"
COMMFABRICNETWORKLEVEL="0"
COMMFABRICENCRYPTION="0"
MATRIXCMBRICKCOMMPORT="0"
SQLSVCSTARTUPTYPE="Automatic"
FILESTREAMLEVEL="0"
ENABLERANU="True"
SQLCOLLATION="Latin1_General_CI_AS"
SQLSVCACCOUNT="NT Service\MSSQL$XAM"
SQLSYSADMINACCOUNTS="BUILTIN\ADMINISTRATORS"
SECURITYMODE="SQL"
INSTALLSQLDATADIR="C:\SQLData"
ADDCURRENTUSERASSQLADMIN="True"
TCPENABLED="1"
NPENABLED="0"
BROWSERSVCSTARTUPTYPE="Automatic"

Я запускаю контейнер с

docker run -i --net=mytransparentnw --name B sqlimage
person Manuel Reinhart    schedule 20.10.2016