sql-server - 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 但没有骰子。
另一个注意事项是,如果没有安装卷,一切都可以正常工作。在这一点上,我质疑音量部分是否值得甚至需要。我对码头工人很陌生。
解决方案
对于那些好奇的人来说,自 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,他为我指明了正确的方向。
推荐阅读
- android - 是否可以将 Flow 与 Room 删除或插入操作一起使用,因为它在 RxJava 中使用 Single 或 Maybe 返回行 ID?
- python - 为什么 `if string[0] == '0':` 工作但也会出错?
- c# - 如何配置客户端?AWS Elasticsearch 请求 C#
- python - df循环中现有值的新df
- xml - 基于类似的子标签将 XML 节点聚集在一起。棒状节点还应该包含不相似的子标签
- python-3.x - Django:为过时的应用程序/模型清理 SQLite d/b
- python - 尝试使用 BayesSearchCV 调整 MLPClassifier hidden_layer_sizes 时出错
- mysql - 从mysql数据库中的多个表中选择数据
- javascript - 我怎样才能让innerHtml 只写一次错误?
- sql - 查询以从 select 语句中检索自定义列