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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM