可能為了保證數據庫運行穩定,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