我无法将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
。
这时,mdf
和ldf
文件在我的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中。
要注意的一件事:在项目的早期版本中,我可以使用不同的mdf
和ldf
文件成功完成此操作,但是不确定如何或是否需要获取{ {1}}和mdf
文件进入某个“状态”,以便在容器中正常运行。
任何帮助将不胜感激。
答案 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,右键单击需要的mdf
和ldf
文件的数据库,然后选择Properties
。然后,在左侧选择Options
页面,在ContainmentType
中选择None
而不是Partial
。单击OK
之后,我复制了新修改的mdf
和ldf
文件,并通过attach_dbs
属性附加了文件,瞧!数据库已成功附加,并显示在我的Docker SQL实例中。