首页 > 解决方案 > T-SQL 无法在已安装的 docker 卷上创建 SQL Server 数据库文件

问题描述

我正在尝试在 docker 中创建一个数据库,并在已安装的卷上创建.mdf.ldf文件,以便在容器关闭时它们不会丢失。我按照Microsoft 的说明将卷添加到他们的示例命令中,如下所示:

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<MY_PASSWORD>' \
  -p 1433:1433 --name sql1 \
  -v ~/mssql/data:/var/data \
  -d mcr.microsoft.com/mssql/server:2017-latest

这是用于创建数据库和文件的 SQL:

CREATE DATABASE [MY_DB]
 CONTAINMENT = NONE
 ON  PRIMARY 
( NAME = N'MY_DB', FILENAME = N'/var/data/MY_DB.mdf' , SIZE = 204800KB , MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB )
 LOG ON 
( NAME = N'MY_DB_log', FILENAME = N'/var/data/MY_DB_log.ldf' , SIZE = 860160KB , MAXSIZE = 2048GB , FILEGROWTH = 65536KB )

我知道如果您在没有 docker 的情况下运行所有​​内容的 Windows 机器上,这目前可以工作,因为我们目前就是这样做的。但是,当我尝试从容器内部(通过与 RDBMS 连接)执行上述 SQL 时,出现错误:

CREATE FILE 在尝试打开或创建物理文件“/var/data/SVT_MVP.mdf”时遇到操作系统错误 2(系统找不到指定的文件。)

我尝试exec进入容器并以 root 身份运行 SQL,但我得到了同样的错误。为了好玩,我什至尝试将映射的主机目录更改为 0777 但没有骰子。

另一个注意事项是,如果没有安装卷,一切都可以正常工作。在这一点上,我质疑音量部分是否值得甚至需要。我对码头工人很陌生。

标签: sql-serverdockertsql

解决方案


对于那些好奇的人来说,自 2017 年以来,macos 上的安装量一直存在问题。相反,您必须创建一个数据卷(命名卷):

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=<MY_PASSWORD>' \
  -p 1433:1433 --name sql1 \
  -v sqlvolume:/var/opt/mssql/data \
  -d mcr.microsoft.com/mssql/server:2017-latest

感谢Larnu,他为我指明了正确的方向。


推荐阅读