SQL Server Express 未在 运行 docker 容器 (Windows) 上启动
SQL Server Express does not start on running docker container (Windows)
我做了什么:
- 我在 Windows 10 周年纪念日为 Windows 安装了 Docker 桌面
更新
- 我拉了一张图microsoft/windowsservercore
- 我在这个镜像的 运行ning 容器 A 上安装了 SQL Server Express 2016。
- 我退出了容器A
- 我将容器 A 提交到一个新的镜像 sqlimage
- I 运行 一个新的容器 B 和新的 sqlimage
我的问题:
在容器 A 上,SQL 服务器正常工作。
在容器 B 上,SQL 服务器无法启动。
当我尝试使用 net start "SQL Server (INST)" 启动服务时,出现以下错误:
发生服务特定错误:5.
这两个容器有什么区别?
Microsoft 在 Docker Hub 上有自己的映像,安装了 SQL Server 2016 Express:microsoft/mssql-server-2016-express-windows。您可以直接使用它,也可以使用您自己的 Docker 开头的文件对其进行扩展:
FROM microsoft/mssql-server-2016-express-windows
如果您更愿意自己构建,您可以从他们的 Dockerfile 中了解 Microsoft 是如何做到的 - 如果您检查 CMD
指令中的 PowerShell 脚本,它会启动 SQL 像这样表达:
start-service MSSQL`$SQLEXPRESS
当您使用 docker commit
保存更改的图像时,您并没有更改 Docker 将在您 运行 从图片,所以你最好 building your image from a Dockerfile.
至于服务无法在您的容器 B 中启动的原因 - 这取决于您安装 SQL 所采取的步骤,以及您在 运行 连接容器时使用的选项。
安装 SQL 服务器 i 运行:
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
我做了什么:
- 我在 Windows 10 周年纪念日为 Windows 安装了 Docker 桌面 更新
- 我拉了一张图microsoft/windowsservercore
- 我在这个镜像的 运行ning 容器 A 上安装了 SQL Server Express 2016。
- 我退出了容器A
- 我将容器 A 提交到一个新的镜像 sqlimage
- I 运行 一个新的容器 B 和新的 sqlimage
我的问题:
在容器 A 上,SQL 服务器正常工作。
在容器 B 上,SQL 服务器无法启动。
当我尝试使用 net start "SQL Server (INST)" 启动服务时,出现以下错误:
发生服务特定错误:5.
这两个容器有什么区别?
Microsoft 在 Docker Hub 上有自己的映像,安装了 SQL Server 2016 Express:microsoft/mssql-server-2016-express-windows。您可以直接使用它,也可以使用您自己的 Docker 开头的文件对其进行扩展:
FROM microsoft/mssql-server-2016-express-windows
如果您更愿意自己构建,您可以从他们的 Dockerfile 中了解 Microsoft 是如何做到的 - 如果您检查 CMD
指令中的 PowerShell 脚本,它会启动 SQL 像这样表达:
start-service MSSQL`$SQLEXPRESS
当您使用 docker commit
保存更改的图像时,您并没有更改 Docker 将在您 运行 从图片,所以你最好 building your image from a Dockerfile.
至于服务无法在您的容器 B 中启动的原因 - 这取决于您安装 SQL 所采取的步骤,以及您在 运行 连接容器时使用的选项。
安装 SQL 服务器 i 运行:
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