代码之家  ›  专栏  ›  技术社区  ›  noblerare

在容器中附加SQL数据库不起作用

  •  0
  • noblerare  · 技术社区  · 7 年前

    我无法将SQL数据库实例附加到Docker容器。

    这是我的档案。

    FROM microsoft/mssql-server-windows-express
    EXPOSE 1433
    
    WORKDIR C:\\tmp
    
    COPY MyDBNAME.mdf ./
    COPY MyDBNAME_log.ldf ./
    
    WORKDIR /
    

    我用它来建立一个形象: docker build . --tag=mynewsql .

    在这一点上 mdf ldf 文件在 C:\\Init 在我的SQL映像中的位置。

    这是我的 docker-compose 我试图用我创建的图像创建一个容器并映射适当的端口和环境变量的文件。我还确保附上我需要的数据库文件。

    version: '3.4'
    
    services:
      sqlserver:
        image: mynewsql:latest
        ports:
          - "14333:1433"
        environment:
          - sa_password=greatpassword
          - ACCEPT_EULA=Y
          - attach_dbs=[{"dbName":"MyDBNAME","dbFiles":["c:\\tmp\\MyDBNAME.mdf","c:\\tmp\\MyDBNAME_log.ldf"]}]
    

    运行 docker合成 文件并尝试连接到我的数据库。

    但主要的问题是 MyDBNAME 数据库未出现在SQL Server Management Studio中。

    有一点需要注意:我可以用不同的 中密度纤维板 最不发达国家 在项目的早期版本中,但不确定如何或是否需要获取 中密度纤维板 最不发达国家 为使文件在容器中正常运行,将文件置于某个“状态”。

    任何帮助都将不胜感激。

    0 回复  |  直到 7 年前
        1
  •  1
  •   noblerare    7 年前

    为了以后的参考,我自己解决了问题。问题是我必须更改要附加的数据库的包含类型。

    我打开了microsoftsqlmanagementstudio,右键单击了 mdf ldf 文件,我想要和选择 Properties . 然后,我选择 Options 在左侧和 ContainmentType ,我选择 None 而不是 Partial . 点击后 OK ,我复制了新修改的 中密度纤维板 最不发达国家 文件,通过 attach_dbs 属性,瞧!数据库连接成功并出现在我的Docker SQL实例中。

        2
  •  0
  •   zigmund    7 年前

    我想您的问题可能是由无效的数据类型引起的。在您的例子中-attach_dbs被YAML视为一个数组,同时连接数据库的PowerShell脚本希望它是字符串

    [Parameter(Mandatory=$false)]
    [string]$attach_dbs
    

    尝试用单引号(')将参数括起来,如下所示:

    - attach_dbs='[{"dbName":"MyDBNAME","dbFiles":["c:\\tmp\\MyDBNAME.mdf","c:\\tmp\\MyDBNAME_log.ldf"]}]'