目录
前言
最近接触到了NL2SQL,有个相对比较适合自己的开源项目,就说看下。忽然发现自己电脑都没安装个数据库。那就安装一个吧,自从有了docker,能docker安装,那就不直接安装到电脑上了,环境会很乱,而且不如docker方便管理
于是,开启了docker部署sqlserver之旅~
一、基础概念
docker:轻量级的容器管理工具,和虚拟机类似,但是比虚拟机轻了很多
sqlserver:微软家族的数据库服务
二、过程步骤
1.docker操作
拉取sqlserver镜像,具体sqlserver版本根据自己的需要选择即可,应该是2017及以上版本才支持了docker容器部署
docker pull mcr.microsoft.com/mssql/server:2019-latest
运行sqlser容器
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=sa密码" -p 1433:1433 --name mssqlserver-2019 -v E:\DockerData\mssql:/var/opt/mssql -d mcr.microsoft.com/mssql/server:2019-latest
相关参数做下解释:
-e "ACCEPT_EULA=Y":同意相关安装协议,必需
-e "MSSQL_SA_PASSWORD=sa密码":设置sa的登录密码
-p 1433:1433:设置端口映射
-v E:\DockerData\mssql:/var/opt/mssql:设置路径映射,实现数据的持久化,否则容器停了以后数据库文件就丢了
2.问题及解决
执行如上命令,一开始看容器是启动了,端口映射信息在docker desktop也看到了,结果很快容器变灰了(启动失败),docker logs 容器名称,报错如下:
bash
This program has encountered a fatal error and cannot continue running at Mon Apr 15 03:30:57 2024
The following diagnostic information is available:
Reason: 0x00000006
Message: Termination of \SystemRoot\system32\AppLoader.exe was due to fatal error 0xC0000001
Address: 0x3fffb588a1cf
Stack Trace:
file://package4/windows/system32/sqlpal.dll+0x000000000000E7CF
file://package4/windows/system32/sqlpal.dll+0x000000000000BA99
file://package4/windows/system32/sqlpal.dll+0x000000000008A432
file://package4/windows/system32/sqlpal.dll+0x000000000008A1CF
file://package4/windows/system32/sqlpal.dll+0x00000000000885D8
file://package4/windows/system32/sqlpal.dll+0x0000000000003D1F
file://package4/windows/system32/sqlpal.dll+0x0000000000205568
file:///windows/system32/AppLoader.exe+0x000000000000371F
file:///windows/system32/AppLoader.exe+0x0000000000003869
file:///windows/system32/AppLoader.exe+0x0000000000003889
file:///windows/system32/AppLoader.exe+0x000000000000A8E8
file:///Windows/SYSTEM32/KERNEL32.DLL+0x0000000000014414
file:///windows/system32/ntdll.dll+0x0000000000075541
Modules:
file://package4/windows/system32/sqlpal.dll=DDAF496DC6C5824FD011F6F3B5BA15F01
file:///windows/system32/AppLoader.exe=71025FF72BB4A78E6487F0EED40B02561
file:///Windows/SYSTEM32/KERNEL32.DLL=C715300FB2664729A6126A3F591E6F302
file:///windows/system32/ntdll.dll=45137AA3F9814512B3123991067EEE6E2
Process: 8 - sqlservr
Thread: 39 (application thread 0x78)
Instance Id: a0185509-4b50-4f25-969b-22a4caedbced
Crash Id: 503973a6-bbeb-4013-987a-05927efd01cd
Build stamp: 5a0761fb39e7c8e4bfc101a82ddf31307102bb6e23a5345ee2033874d57334af
Distribution: Ubuntu 20.04.6 LTS
Processors: 20
Total Memory: 16593043456 bytes
Timestamp: Mon Apr 15 03:30:57 2024
猜测:看错误信息,有permission dined相关字样,难道是权限不足?
行动:看了下映射的本地路径其实已经有写入文件,不过还是试着以管理员权限重新执行命令,不过还是不行
找AI:问了半天AI也搞不懂啥情况
猜测:难道是2019的镜像有问题?
行动:下载2022版本,重复如上操作,结果一样的报错
找度娘:看到一篇写docker部署sqlserver的,人家在上面设置路径映射的时候设置了3个路径映射,分别给mssql下data、log、secrets设置路径映射
行动:那就这么试试吧,果然可以了。而且,我试着只添加data路径映射也是可以的
总结
这个操作其实挺简单,就是有时候需要避个坑。