linux 下 docker 版的 sqlserver 运行报错:This program requires a machine with at least 2000 megabytes of memory.
可能为了保证数据库运行稳定,sqlserver 限制了运行机器的最小内存,网上有相关的文章提到可以修改此限制,但是也要根据实际情况来决定是否真的要在小内存服务器中跑哦~
参考:https://blog.csdn.net/weixin_42183854/article/details/105173806
https://www.cnblogs.com/johnwii/p/8525490.html
https://www.cnblogs.com/zkweb/archive/2016/12/06/6136826.html
大致流程:
1、需要一台内存够的服务器来运行相同版本的 sqlserver 以提取容器内文件;
2、找到:/opt/mssql/bin/
sqlservr 文件(大概两兆多)并复制出来;
3、找一个 python 环境,linux、windows 都可以(原谅我不会修改,只能照搬网上的方法);
4、大概执行以下三句(python 3.x 不知道哪个版本开始,replace 方法的参数需要加一个 b 来转换字符串):
>>> oldfile = open("sqlservr", "rb").read() >>> newfile = oldfile.replace(b"\x00\x94\x35\x77", b"\x00\x80\x84\x1e") >>> open("sqlservr_low_limit", "wb").write(newfile)
这里是替换原有数值 2000000000 为数值 512000000(十六进制,低位在左,转换的时候需要倒过来),旧的版本可能是需要替换 3250000000。
判断是哪个数值可以通过查找(其实错误提示都已经告诉了,直接转换过来找就好了),如果返回 –1 则没有结果,正整数是找到的地址(应该):
>>> oldfile.find("\x00\x94\x35\x77")
5、因为 sqlserver 的包太大了,重新打包回去很难受,因为 docker 可以映射文件,所以在运行的时候将修改后的文件映射到容器就可以了
sudo docker run -d \ -v /home/sqlservr_low_limit:/opt/mssql/bin/sqlservr \ -e 'ACCEPT_EULA=Y' \ -e 'SA_PASSWORD=123456' \ -e 'MSSQL_PID=Express' \ -e 'MSSQL_LCID=2052' \ -e TZ='Asia/Shanghai' \ -p 1433:1433 \ --name mssqlserver mcr.microsoft.com/mssql/server
输了你,赢了世界又如何...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!