我做了什么:
我的问题: 在容器A上,SQL Server正常工作。 在容器B上,无法启动SQL Server。 当我尝试使用net start“SQL Server(INST)”启动服务时出现以下错误: 发生特定于服务的错误:5。
这两个容器有什么区别?
Microsoft在安装了SQL Server 2016 Express的Docker Hub上有自己的映像:microsoft/mssql-server-2016-express-windows。您可以直接使用它,或者使用您自己的Dockerfile扩展它:
FROM microsoft/mssql-server-2016-express-windows
如果你想构建自己的,你可以看看微软如何从他们的Dockerfile中做到这一点 - 如果你在CMD
指令中检查PowerShell脚本,它就像这样启动SQL Express:
start-service MSSQL`$SQLEXPRESS
当您使用docker commit
保存更改的图像时,您不会更改Docker在从图像运行新容器时将使用的CMD
,因此您最好离开building your image from a Dockerfile。
至于为什么服务无法在容器B中启动 - 这取决于您安装SQL所采取的步骤,以及运行容器时使用的选项。
要安装SQL Server,我运行:
SETUP.exe /ConfigurationFile=ConfigurationFile.ini /SAPWD="XXXXXXX" /IACCEPTSQLSERVERLICENSETERMS
的ConfigurationFile:
[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