请求并运行 SQL Server Linux 容器映像
在开始执行以下步骤之前,请确保已选择首选的 shell(bash、PowerShell 或 cmd)。
对于本文中的 bash 命令,将使用 sudo。 如果不想使用 sudo 来运行 Docker,可以配置 docker 组并将用户添加到该组,详情请参阅 适用于 Linux 的 Docker 安装后步骤。
从注册表拉取容器
从 Microsoft 容器注册表中拉取 SQL Server 2019 (15.x) Linux 容器映像。
Bash 命令
bash
docker pull mcr.microsoft.com/mssql/server:2019-latest
说明 :
本快速入门使用 SQL Server 2019 (15.x) 容器。若需其他版本的 Linux 容器,可参考:
- SQL Server 2025
- SQL Server 2022
- SQL Server 2017
上述命令拉取最新的 SQL Server 2019 映像,若需特定版本,需添加标记(如
mcr.microsoft.com/mssql/server:2019-GA-ubuntu)。所有可用映像可查看 Microsoft 工件注册表。
运行容器
在 bash shell(或管理员权限的 PowerShell 控制台)中,使用以下命令运行 Linux 容器镜像。
重要 :
SA_PASSWORD环境变量已弃用,请改用MSSQL_SA_PASSWORD。
Bash 命令
bash
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-p 1433:1433 --name sql1 --hostname sql1 \
-d \
mcr.microsoft.com/mssql/server:2019-latest
密码要求 :
密码需遵循 SQL Server 默认密码策略:至少 8 个字符,且包含以下四类字符中的三类(大写字母、小写字母、十进制数字、符号),最长可设 128 个字符。若不满足要求,容器无法初始化 SQL Server 并会停止运行,可通过
docker logs查看错误日志。默认情况下,本示例创建的是 SQL Server 开发人员版容器;运行生产版本的流程略有差异,详情请参阅 运行生产容器映像。
参数说明
| 参数 | 说明 |
|---|---|
-e "ACCEPT_EULA=Y" |
将 ACCEPT_EULA 设为任意值,确认接受最终用户许可协议(必选)。 |
-e "MSSQL_SA_PASSWORD=<password>" |
指定符合密码策略的强密码(必选)。 |
-e "MSSQL_COLLATION=<SQL_Server_collation>" |
自定义 SQL Server 排序规则,默认值为 SQL_Latin1_General_CP1_CI_AS。 |
-p 1433:1433 |
将主机的 TCP 端口(第一个值)映射到容器的 TCP 端口(第二个值),示例中容器 1433 端口对主机 1433 端口公开。 |
--name sql1 |
为容器指定自定义名称(避免随机生成),多个容器不可重复使用同一名称。 |
--hostname sql1 |
显式设置容器主机名(默认是随机生成的容器 ID)。 |
-d |
以守护进程模式在后台运行容器。 |
mcr.microsoft.com/mssql/server:2019-latest |
要运行的 SQL Server Linux 容器映像。 |
查看容器列表
使用 docker ps 命令查看 Docker 容器状态。
Bash 命令
bash
docker ps -a
输出示例
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d4a1999ef83e mcr.microsoft.com/mssql/server:2019-latest "/opt/mssql/bin/perm..." 2 minutes ago Up 2 minutes 0.0.0.0:1433->1433/tcp, :::1433->1433/tcp sql1
状态说明:
若
STATUS列显示Up,表示 SQL Server 已在容器中运行,并侦听PORTS列指定的端口;若
STATUS列显示Exited,请参阅 SQL Server Docker 容器故障排除;当 SQL Server 错误日志显示
SQL Server is now ready for client connections. This is an informational message; no user action is required时,即可连接服务器。可通过以下命令查看日志:
bashdocker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
补充说明 :
--hostname参数会修改容器内部名称,可通过以下 Transact-SQL 查询验证:
sqlSELECT @@SERVERNAME, SERVERPROPERTY('ComputerNamePhysicalNetBIOS'), SERVERPROPERTY('MachineName'), SERVERPROPERTY('ServerName');建议将
--hostname和--name设置为相同值,便于识别目标容器。
安全提示 :生产环境中需修改 SA 密码(
MSSQL_SA_PASSWORD会出现在ps -eax输出和环境变量中)。
连接到 SQL Server
以下步骤在容器内部使用 sqlcmd 命令行工具连接 SQL Server。
1. 进入容器的交互式 Bash Shell
bash
docker exec -it sql1 "bash"
(sql1 是创建容器时 --name 参数指定的名称)
2. 本地连接 SQL Server
在容器内部通过完整路径调用 sqlcmd:
bash
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<password>"
说明:
最新版本的
sqlcmd默认启用加密连接,若连接失败,可添加-No选项将加密设为"可选":
bash/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<password>" -No也可省略密码参数,执行后手动输入:
bash/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>连接成功后会显示
sqlcmd提示符:1>。
创建和查询数据
以下步骤通过 sqlcmd 和 Transact-SQL 完成新建数据库、插入数据、查询数据的操作。
1. 新建数据库
在 sqlcmd 提示符中输入以下命令,创建名为 TestDB 的数据库:
sql
CREATE DATABASE TestDB;
SELECT name FROM sys.databases;
GO
(GO 用于执行前序命令)
2. 插入数据
切换到 TestDB 数据库,创建 Inventory 表并插入数据:
sql
USE TestDB;
CREATE TABLE Inventory
(
id INT,
name NVARCHAR (50),
quantity INT
);
INSERT INTO Inventory VALUES (1, 'banana', 150);
INSERT INTO Inventory VALUES (2, 'orange', 154);
GO
3. 选择数据
查询 Inventory 表中数量大于 152 的行:
sql
SELECT * FROM Inventory WHERE quantity > 152;
GO
4. 退出 sqlcmd 和容器 Shell
sql
QUIT -- 退出 sqlcmd 会话
在容器的 Bash Shell 中输入:
bash
exit -- 退出交互式 Shell(容器仍在后台运行)
从容器外连接
可从 Linux、Windows 或 macOS 上支持 SQL 连接的外部工具,通过主机 IP 地址连接容器内的 SQL Server。
以下示例使用 sqlcmd 从容器外连接(需提前安装 sqlcmd 工具,其他工具连接逻辑类似):
1. 查找容器主机的 IP 地址
bash
ifconfig # 或 ip addr
2. 使用 sqlcmd 连接
bash
sudo sqlcmd -S <ip_address>,1433 -U <userid> -P "<password>"
说明:
若使用
sqlcmd 18+版本连接失败,添加-No选项:
bashsudo sqlcmd -S <ip_address>,1433 -U <userid> -P "<password>" -No密码需遵循前文的密码策略要求;
需在防火墙中开放主机的 1433 入站端口。
3. 执行命令并退出
运行 Transact-SQL 命令后,输入 QUIT 退出 sqlcmd。
常用外部连接工具
- 适用于 Visual Studio Code 的 MSSQL 扩展
- SQL Server Management Studio (SSMS)
- mssql-cli(预览版)
- PowerShell
移除容器
若需删除本教程创建的 SQL Server 容器,执行以下命令:
bash
docker stop sql1 # 停止容器
docker rm sql1 # 删除容器
其他版本安装请参考:快速入门:使用 Docker 运行 SQL Server Linux 容器映像