1、拉取 SqlServer 镜像
docker pull mcr.microsoft.com/mssql/server
2、运行容器
sudo docker run -d \
--restart=always \
--name sqlserver \
--network host \
-e 'ACCEPT_EULA=Y' \
-e 'SA_PASSWORD=Admin@123' \
-e 'MSSQL_PID=Express' \
-e 'MSSQL_LCID=2052' \
-e TZ='Asia/Shanghai' \
-p 1433:1433 \
-t mcr.microsoft.com/mssql/server
参数解释:
-e "ACCEPT_EULA=Y":默认选择同意协议许可证
-e "SA_PASSWORD=123456":sa账户密码,设置SA用户的密码,要求密码长度必须至少为8个字符,并包含以下四组中的三组字符:大写字母、小写字母、以10为基数的数字和符号。注意密码强度不够,会出现容器启动就停止,密码需要大小写字母+数字+特殊符号。
3、进入容器
docker exec -it 容器id /bin/bash
4、进入数据库
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "123456"
注意:
如果是虚拟机安装,而虚拟机分配的内存较小,会导致运行容器后容器一直在重启状态,通过 docker logs 容器id,可以看到日志显示:“This program requires a machine with at least 2000 megabytes of memory.”,这表示 sqlserver 限制了运行内存为2G,所以需要修改下配置。
1.停止正在运行的容器(可选):
docker stop 容器id
2.拷贝容器内的/opt/mssql/bin/sqlservr文件到本地目录:
docker cp 容器id:/opt/mssql/bin/sqlservr /home/sqlservr
这里只能用容器id,因为容器是停止运行状态的,非停止运行状态下可以是容器名。
3.改名备份
mv sqlservr sqlservr.old
4.通过python修改sqlservr文件
如果通过输入 python 命令提示:“ python: 未找到命令”,可通过命令:which python3 或 whereis python3 查看,如果都不存在,就需要安装,安装命令:
yum install python3 -y
python 安装成功后,需要导入到环境变量中:export PATH=$PATH:/path/to/python,此命令单次有效,需要设置进系统配置。
在修改之前,确认当前拉取的镜像版本的sqlservr文件是否存在“\x00\x94\x35\x77”,通过指令:oldfile.find(b"\x00\x94\x35\x77"),返回-1则不存在,正整数为存在。不存在情况下需要查下“\xff\x93\x35\77”,并将下面修改指令:newfile = oldfile.replace(b"\x00\x94\x35\x77", b"\x00\x80\x84\x1e")变更为newfile = oldfile.replace(b"\xff\x93\x35\77", b"\x00\x80\x84\x1e")。
修改文件:
python3
进入 python 指令行后逐行输入以下内容:
oldfile = open("sqlservr.old", "rb").read()
newfile = oldfile.replace(b"\x00\x94\x35\x77", b"\x00\x80\x84\x1e")
open("sqlservr", "wb").write(newfile)
exit()
5.给新生成的 sqlservr 文件授权(重要,否则报错:/opt/mssql/bin/sqlservr: Permission denied,sqlservr 文件无权限操作):
chomod 777 sqlservr
6.将修改后的 sqlservr 发送到容器
docker cp /home/sqlservr 容器id:/opt/mssql/bin/sqlservr
7.运行/重启容器
docker start/restart 容器id
文章评论