在容器中附加SQL数据库无效

时间:2019-02-26 21:44:32

标签: sql-server docker docker-compose

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

这是我的Dockerfile。

FROM microsoft/mssql-server-windows-express
EXPOSE 1433

WORKDIR C:\\tmp

COPY MyDBNAME.mdf ./
COPY MyDBNAME_log.ldf ./

WORKDIR /

我用它来构建图像:docker build . --tag=mynewsql

这时,mdfldf文件在我的SQL映像的C:\\Init位置。

这是我的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-compose文件并尝试连接到我的数据库即可。

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

要注意的一件事:在项目的早期版本中,我可以使用不同的mdfldf文件成功完成此操作,但是不确定如何或是否需要获取{ {1}}和mdf文件进入某个“状态”,以便在容器中正常运行。

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

我想您的问题可能是由无效的数据类型引起的。在您的情况下-被YAML视为-attach_dbs的数组,而附加数据库的PowerShell脚本期望它为字符串

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

尝试将参数括在单引号(')中,

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

答案 1 :(得分:0)

我想出自己的问题以供将来参考。问题是我必须更改要附加的数据库的包含类型。

我打开Microsoft SQL Management Studio,右键单击需要的mdfldf文件的数据库,然后选择Properties。然后,在左侧选择Options页面,在ContainmentType中选择None而不是Partial。单击OK之后,我复制了新修改的mdfldf文件,并通过attach_dbs属性附加了文件,瞧!数据库已成功附加,并显示在我的Docker SQL实例中。