【问题标题】:SQL Server Express does not start on running docker container (Windows)SQL Server Express 无法在运行 docker 容器 (Windows) 时启动
【发布时间】:2017-03-02 06:26:42
【问题描述】:

我做了什么:

  • 我在 Windows 10 Anniversary 上安装了 Docker Desktop for Windows 更新
  • 我提取了图像 microsoft/windowsservercore
  • 我在此映像的运行容器 A 上安装了 SQL Server Express 2016
  • 我退出了容器A
  • 我将容器 A 提交给了一个新的镜像 sqlimage
  • 我用新的 sqlimage 运行一个新的容器 B

我的问题:
在容器 A 上,SQL Server 可以正常工作。
在容器 B 上,无法启动 SQL Server。
当我尝试使用 net start "SQL Server (INST)" 启动服务时,出现以下错误:
发生服务特定错误:5.

这两个容器有什么区别?

【问题讨论】:

    标签: docker sql-server-express docker-for-windows docker-desktop server-core


    【解决方案1】:

    Microsoft 在安装了 SQL Server 2016 Express 的 Docker Hub 上拥有自己的映像:microsoft/mssql-server-2016-express-windows。你可以直接使用它,或者用你自己的 Dockerfile 扩展它:

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

    如果您想自己构建,您可以从他们的 Dockerfile 中了解 Microsoft 是如何做到的 - 如果您检查 CMD 指令中的 PowerShell 脚本,它会像这样启动 SQL Express:

    start-service MSSQL`$SQLEXPRESS
    

    当您使用docker commit 保存更改的映像时,您不会更改 Docker 在您从映像运行新容器时将使用的CMD,因此您最好使用building your image from a Dockerfile

    至于为什么服务无法在您的容器 B 中启动 - 这取决于您安装 SQL 所采取的步骤,以及您在运行容器时使用的选项。

    【讨论】:

    • 我尝试使用 powershell 和 start-service 启动服务。它没有启动。我想避免在创建容器时下载和安装 sqlserver,因为我想运行许多容器,这会花费太长时间。我用安装 sql server 的步骤写了一个答案。谢谢!
    • 您可以编写一个包含RUN 指令的 Dockerfile 来下载 SQL Server 安装程序并运行安装程序。只有当您使用docker build 生成图像时,才会发生这些事情。您可以使用 docker run 从同一个镜像启动多个容器,它们不会重复 Dockerfile 中的任何构建指令 - 只有 CMD 指令告诉 Docker 在容器启动时要做什么。
    • 我最终使用 microsoft/mssql-server-2016-express-windows 图像解决了这个问题,并将我的应用程序添加到其中。
    【解决方案2】:

    安装我运行的 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
    

    【讨论】:

      猜你喜欢
      • 2022-12-22
      • 2022-08-10
      • 2018-03-01
      • 2014-09-24
      • 2020-12-20
      • 2019-01-15
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多