注:自备网络环境
bash
#!/bin/bash
# ============================================================
# Docker 一键部署 SQL Server 2022 + 自动测试
# ============================================================
SA_PASSWORD="YourStrong@Passw0rd"
CONTAINER_NAME="sqlserver-test"
PORT=1433
IMAGE="mcr.microsoft.com/mssql/server:2022-latest"
echo "==> [1/4] 拉取 SQL Server 镜像..."
docker pull $IMAGE
echo "==> [2/4] 启动容器..."
docker run -d \
--name $CONTAINER_NAME \
-e "ACCEPT_EULA=Y" \
-e "SA_PASSWORD=$SA_PASSWORD" \
-e "MSSQL_PID=Developer" \
-p $PORT:1433 \
--memory="2g" \
--restart unless-stopped \
$IMAGE
echo "==> [3/4] 等待 SQL Server 就绪(最多 60 秒)..."
for i in $(seq 1 12); do
sleep 5
STATUS=$(docker exec $CONTAINER_NAME \
/opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P "$SA_PASSWORD" \
-Q "SELECT 1" -No 2>/dev/null)
if [ $? -eq 0 ]; then
echo " SQL Server 已就绪!"
break
fi
echo " 等待中...($((i*5))s)"
done
echo "==> [4/4] 执行基础测试..."
docker exec $CONTAINER_NAME \
/opt/mssql-tools18/bin/sqlcmd \
-S localhost -U sa -P "$SA_PASSWORD" -No \
-Q "
-- 建库
CREATE DATABASE TestDB;
GO
USE TestDB;
GO
-- 建表
CREATE TABLE Users (
Id INT IDENTITY(1,1) PRIMARY KEY,
Name NVARCHAR(100) NOT NULL,
Email NVARCHAR(200),
CreatedAt DATETIME DEFAULT GETDATE()
);
GO
-- 插入数据
INSERT INTO Users (Name, Email) VALUES
(N'张三', 'zhangsan@example.com'),
(N'李四', 'lisi@example.com'),
(N'王五', 'wangwu@example.com');
GO
-- 查询
SELECT * FROM Users;
GO
-- 统计
SELECT COUNT(*) AS TotalUsers FROM Users;
GO
"
echo ""
echo "=============================="
echo " 部署完成!连接信息:"
echo " 主机: localhost:$PORT"
echo " 用户: sa"
echo " 密码: $SA_PASSWORD"
echo "=============================="
停止并删除实例:
bash
docker stop sqlserver-test && docker rm sqlserver-test