centos7 Docker安装Sqlserver时报This program requires a machine with at least 2000 megabytes of memory的解决办法
正常拉取镜像步骤
拉取镜像
docker pull mcr.microsoft.com/mssql/server:2017-latest
运行镜像,生成容器
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=SA@12345" -p 1433:1433 --memory 2000M --name sqlserver -d mcr.microsoft.com/mssql/server:2017-lates
这时候使用命令是看不到该容器运行的
docker ps -a
使用命令查看报错日志
docker logs sqlserver
#看到错误
his program requires a machine with at least 2000 megabytes of memory
解决方案
破解思路:
把内存限制被修改为 512m在启动即可
正常情况下我们可以进入docker内部去修改文件,但是这里由于启动不了docker容器,所以也就进不去,我们可以把docker内部的文件复制到宿主机,修改后在复制回去宿主机即可。当然也可以挂载docker内部的文件在宿主机这样也很方便修改
语法:docker cp [容器id]:docker容器中配置文件路径 主机路径
实例:docker cp [容器id]:/opt/mssql/bin/sqlservr “/home/sqlservr” 这样就可以把docker内部的sqlservr文件拷贝出来到home文件夹下了
docker cp sqlserver:/opt/mssql/bin/sqlservr "/home/sqlservr"
然后修改从docker内部复制出来的文件
先使用mv命令改一下文件名,后面修改后原始文件就还在相当于备份一下文件:
mv sqlservr sqlservr.old
使用python修改内存限制代码
centos7 默认自带py环境
在py控制台下分别输入
oldfile=open("sqlservr.old","rd").read()
newfile=oldfile.replace("\x00\x94\x35\x77", "\x00\x80\x84\x1e")
open("sqlservr", "wb").write(newfile)
exit()
改完后生成新的sqlservr文件
复制到docker之前修改一下文件权限,否则在start容器时,会有权限的报错
命令:
chmod 777 sqlservr
把修改后的文件复制到docker内部
语法:docker cp 主机文件路径 容器id(或者容器name):docker容器中配置文件路径
实例:docker cp /home/sqlservr 容器id(或者容器name):/opt/mssql/bin/sqlservr
docker cp /home/sqlservr sqlserver:/opt/mssql/bin/sqlservr
最后重启sqlserver容器
docker restart sqlserver
#查看容器状态
docker ps -a