Apple Silicon Mac 上使用 Docker 部署 SQL Server 2022,并通过 DBeaver 完成课程数据库作业环境配置

在 Apple Silicon Mac 上使用 Docker 部署 SQL Server 2022,并通过 DBeaver 完成课程数据库实验
实践环境:Apple M5 / macOS / Docker Desktop / SQL Server 2022 Developer Edition / DBeaver Community 26.2.2
配置时间:2026 年 10 月 16 日
配置目标:在没有 Windows 机房环境的情况下,使用 Mac 运行 Microsoft SQL Server,并恢复课程提供的study.bak数据库。
1. 背景与技术选型
学校机房使用 Windows 和 SQL Server 2012 + SQL Server Management Studio(SSMS)。课程实验要求使用 Study 数据库,其中包括学生表 S、课程表 C 和作业成绩表 Homework。
我的电脑使用 Apple Silicon(M5)芯片,CPU 架构为 ARM64;Microsoft SQL Server 官方 Linux 容器镜像使用 AMD64/x86-64 架构,因此不能像普通 ARM64 原生容器那样直接运行。本文采用 Docker 的 linux/amd64 平台模拟运行 SQL Server 2022,再用 macOS 原生的 DBeaver 作为数据库客户端。
至少对于当前的第一次作业,我的电脑没有任何卡顿,都还挺流畅的吧,接下来进行配置步骤,记得先下载好学习通里面的study.rar
2. 各组件
| 组件 | 角色 | 本次用途 |
|---|---|---|
| Docker Desktop | 容器运行与管理平台 | 运行 SQL Server 容器 |
| SQL Server 2022 | 数据库管理系统(DBMS) | 保存数据、解析和执行 T-SQL |
| DBeaver Community | 数据库客户端(GUI) | 编写 SQL、管理数据库、查看查询结果 |
| Microsoft JDBC Driver | 数据库连接驱动 | 让 DBeaver 与 SQL Server 通信 |
study.rar |
课程提供的压缩包 | 解压得到 study.bak |
study.bak |
SQL Server 数据库备份 | 恢复为 Study 数据库 |
数据访问流程:
macOS 上的 DBeaver
│ JDBC / TCP 127.0.0.1:1433
▼
Docker Desktop
└── mssql-study 容器(SQL Server 2022, linux/amd64)
└── Study 数据库
├── dbo.S
├── dbo.C
└── dbo.Homework
3. 拉取 SQL Server 镜像
首先确保 Docker Desktop 已启动,然后在 macOS 终端执行:
docker pull --platform linux/amd64 \
mcr.microsoft.com/mssql/server:2022-latest
参数说明:
docker pull:从镜像仓库下载镜像。--platform linux/amd64:指定镜像架构为 AMD64;在 Apple Silicon 上需要跨架构运行。mcr.microsoft.com/mssql/server:2022-latest:Microsoft Container Registry 上的 SQL Server 2022 镜像。
镜像下载成功后,终端显示 Downloaded newer image 或 Image is up to date。
4. 创建 SQL Server 容器
注意:下面是用于复现环境的示例命令。请自行设置一个强密码,如果已有
mssql-study容器,不要重复执行docker run。
docker run -d \
--name mssql-study \
--platform linux/amd64 \
-e 'ACCEPT_EULA=Y' \
-e 'MSSQL_PID=Developer' \
-e 'MSSQL_SA_PASSWORD=<你自己的密码>' \
-p 127.0.0.1:1433:1433 \
-v mssql-study-data:/var/opt/mssql \
mcr.microsoft.com/mssql/server:2022-latest
主要参数:
| 参数 | 含义 |
|---|---|
-d |
后台运行容器 |
--name mssql-study |
为容器命名 |
--platform linux/amd64 |
指定 AMD64 平台 |
ACCEPT_EULA=Y |
接受 SQL Server 许可协议 |
MSSQL_PID=Developer |
使用 Developer Edition(开发测试用途) |
MSSQL_SA_PASSWORD |
设置 SQL Server 管理员 sa 的初始密码 |
-p 127.0.0.1:1433:1433 |
将容器的 1433 端口仅映射到 Mac 本机回环地址 |
-v mssql-study-data:/var/opt/mssql |
用 Docker 命名卷持久化数据库文件 |
检查状态:
docker ps -a
docker logs --tail 60 mssql-study
当日志出现以下文字时,说明数据库引擎已启动:
SQL Server is now ready for client connections.
再测试 TCP 端口:
nc -vz 127.0.0.1 1433
出现 succeeded 表示端口可连接,但还不代表用户名和密码已通过验证。
5. 使用 Homebrew 安装 DBeaver
DBeaver 是 macOS 图形化应用程序,并非只能在终端里使用。通过 Homebrew 安装:
brew install --cask dbeaver-community
本次安装过程中曾出现:
curl: (18) Transferred a partial file
Error: Download failed on Cask 'dbeaver-community'
这次是下载中断,重新执行相同安装命令后下载完成,DBeaver 成功安装到 /Applications/DBeaver.app。
打开软件:
open -a DBeaver
6. 连接 SQL Server
DBeaver 左上角点击 New Database Connection,选择 SQL Server(Microsoft JDBC Driver),不要选 Azure SQL Server 或旧版 jTDS 驱动。
填写连接参数:
| 字段 | 配置 |
|---|---|
| Host | 127.0.0.1 |
| Port | 1433 |
| Database/Schema | master |
| Authentication | SQL Server Authentication |
| Username | sa |
| Password | 创建容器时设置的密码 |
| Trust Server Certificate | 本地实验环境勾选 |
本地实验中 SQL Server 使用自签名证书,因此启用 Trust Server Certificate 可以跳过证书身份验证;这不是生产环境的推荐安全配置。
首次连接可能需要下载 JDBC 驱动。本次成功连接时,DBeaver 显示:
Connected (359 ms)
Microsoft SQL Server 2022 Developer Edition
Microsoft JDBC Driver 13.4 for SQL Server
首次测试 SQL
在连接上右键,选择 SQL Editor → New SQL Script:
SELECT 1 + 1 AS TestResult;
执行后返回 TestResult = 2,说明从客户端到数据库引擎的 SQL 执行链路正常。
7. 课程数据库备份:从 study.rar 到 Study
课程提供的是 study.rar 压缩包,解压后得到 study.bak。.bak 不是普通 CSV 数据集,而是 SQL Server 数据库备份文件。
安装 RAR 解压工具:
brew install unar
假设备份下载到 ~/Downloads:
cd ~/Downloads
unar study.rar
ls -lh ~/Downloads/study.bak
file ~/Downloads/study.bak
本次发现 study.bak 已存在,因此解压程序提示是否覆盖;选择跳过,保留已有文件。file 检查结果识别为 Microsoft SQL Server 备份,大小约 2.6 MB。
7.1 复制备份到容器
在 Mac 终端执行:
docker exec -u 0 mssql-study mkdir -p /var/opt/mssql/backup
docker cp ~/Downloads/study.bak \
mssql-study:/var/opt/mssql/backup/study.bak
docker exec -u 0 mssql-study \
chown mssql:mssql /var/opt/mssql/backup/study.bak
检查:
docker exec mssql-study ls -lh /var/opt/mssql/backup/study.bak
说明:Mac 的 ~/Downloads/study.bak 与容器内部的 /var/opt/mssql/backup/study.bak 是两个不同的文件路径。SQL Server 执行 RESTORE 时必须读取它能访问到的容器内路径。
7.2 读取备份的逻辑文件名
在 DBeaver 中执行:
RESTORE FILELISTONLY
FROM DISK = N'/var/opt/mssql/backup/study.bak';
本次返回两条记录:
| LogicalName | Type |
|---|---|
Study |
D(数据文件) |
Study_log |
L(事务日志) |
备份的原始 PhysicalName 指向 Windows 文件路径,而 SQL Server 容器运行在 Linux 上,因此恢复时需要使用 WITH MOVE。
7.3 恢复数据库
以下命令仅在目标实例不存在同名 Study 数据库时执行。切勿对已有数据库盲目重复恢复或添加 REPLACE。
RESTORE DATABASE Study
FROM DISK = N'/var/opt/mssql/backup/study.bak'
WITH
MOVE N'Study' TO N'/var/opt/mssql/data/Study.mdf',
MOVE N'Study_log' TO N'/var/opt/mssql/data/Study_log.ldf',
RECOVERY,
STATS = 10;
RESTORE DATABASE:根据备份恢复数据库。MOVE:把备份中的逻辑数据文件映射到 Linux 文件路径。RECOVERY:完成恢复,使数据库可供访问。STATS = 10:定期报告恢复进度。
本次执行后,输出包含:
Database 'Study' running the upgrade ...
RESTORE DATABASE successfully processed ...
7.4 验证数据库及数据表
SELECT name, state_desc
FROM sys.databases
WHERE name = N'Study';
预期:Study | ONLINE。
SELECT TABLE_SCHEMA, TABLE_NAME
FROM Study.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE';
本次实际返回:
dbo | S
dbo | C
dbo | Homework
最后可以读取数据:
SELECT TOP (10) * FROM Study.dbo.S;
SELECT TOP (10) * FROM Study.dbo.C;
SELECT TOP (10) * FROM Study.dbo.Homework;
Study.dbo.S 是三段式对象名:数据库名.架构名.表名。即使当前连接默认数据库为 master,也能通过完整名称访问 Study。
8. 实际踩坑记录
8.1 Connection refused
DBeaver 曾提示:
The TCP/IP connection to the host 127.0.0.1, port 1433 has failed.
Connection refused.
检查后发现容器状态是:
mssql-study Exited (139)
执行:
docker start mssql-study
nc -vz 127.0.0.1 1433
端口测试成功后,DBeaver 不再报连接拒绝。139 通常与段错误有关,ARM64 上模拟运行 AMD64 数据库进程可能是相关因素,但没有充分证据断言唯一原因。
8.2 Login failed for user 'sa'
网络连通后又遇到 sa 登录失败。检查并重新输入正确密码后,连接测试通过。此错误属于身份验证问题,与 TCP 端口拒绝不同。
9. 日常启动和安全退出
下次使用:
# 先启动 Docker Desktop,再运行:
docker start mssql-study
nc -vz 127.0.0.1 1433
open -a DBeaver
打开已有的连接并访问 Study,不需要重新导入备份。
实验结束:
- 保存 SQL 脚本,确认需要提交的数据库事务已提交。
- 退出 DBeaver。
- 在 Mac 终端执行:
docker stop -t 60 mssql-study
docker ps -a --filter name=mssql-study
不要把 docker rm、docker volume rm 当作正常退出命令。命名卷保存的是持久化数据库文件,但不能替代独立备份。
10. 总结
最终完成了以下工作:
- 在 Apple Silicon Mac 上拉取并运行 AMD64 SQL Server 2022 镜像。
- 使用 Docker 命名卷保存数据库文件,并将 SQL Server 1433 端口限制为本机访问。
- 安装 DBeaver Community,通过 Microsoft JDBC Driver 连接 SQL Server。
- 从课程的
study.rar中取得study.bak,复制到容器,使用RESTORE FILELISTONLY检查备份。 - 使用
RESTORE DATABASE ... WITH MOVE恢复Study数据库,确认存在S、C、Homework三张表。 - 记录了容器异常退出、登录失败、下载中断等排查过程。
这套环境可以支持课程中的基础 T-SQL 查询实验,但 SQL Server 官方 AMD64 镜像在 Apple Silicon 上的模拟运行稳定性需要持续验证。建议保留老师提供的原始 .bak 文件,定期导出自己的 SQL 脚本和重要数据。

posted on 2026-10-16 18:51 tintin7790 阅读(29) 评论(2) 收藏 举报
浙公网安备 33010602011771号