在 Linux上 运行 SQL Server 的容器
可以直接参照官方文档:
快速入门:使用 Docker 运行 SQL Server Linux 容器映像
这里是在centos 7上使用docker 运行SQL Server 2019 容器镜像
1、从注册表拉取容器
从 Microsoft 容器注册表中请求 SQL Server 2019 (15.x) Linux 容器映像。
docker pull mcr.microsoft.com/mssql/server:2019-latest
2、运行容器
要使用 Docker 运行 Linux 容器镜像
【重要】 SA_PASSWORD 环境变量已弃用。 请改用 MSSQL_SA_PASSWORD。
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 默认密码策略。
默认情况下,密码必须为至少八个字符且包含以下四种字符中的三种:大写字母、小写字母、十进制数字、符号。 密码可最长为 128 个字符。
使用的密码应尽可能长,尽可能复杂。 如果不遵循这些密码要求,则容器无法设置 SQL Server,并会停止工作。 可使用 docker
logs 命令检查错误日志。
| 参数 | 说明 |
|---|---|
| -e “ACCEPT_EULA=Y” | 将 ACCEPT_EULA 变量设置为任意值,以确认接受最终用户许可协议。SQL Server 映像的必需设置。 |
| -e “MSSQL_SA_PASSWORD=” | 指定至少包含 8 个字符且符合密码策略的强密码。SQL Server 映像的必需设置。 |
| -e “MSSQL_COLLATION=<SQL_Server_collation>” | 指定自定义 SQL Server 排序规则,而不使用默认值 SQL_Latin1_General_CP1_CI_AS。 |
| -p 1433:1433 | 将主机环境中的 TCP 端口(第一个值)映射到容器中的 TCP 端口(第二个值)。在此示例中,SQL Server 侦听容器中的 TCP 1433,此容器端口随后会对主机上的 TCP 端口 1433 公开。 |
| –name sql1 | 为容器指定一个自定义名称,而不是使用随机生成的名称。如果运行多个容器,则无法重复使用相同的名称。 |
| –hostname sql1 | 用于显式设置容器主机名。如果未指定主机名,则主机名默认为容器 ID,这是随机生成的系统 GUID。 |
| -d | 在后台运行容器(守护程序)。 |
| mcr.microsoft.com/mssql/server:2019-latest | SQL Server Linux 容器映像。 |
3、查看容器列表
要查看 Docker 容器,请使用 docker ps 命令。
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 列中指定的端口。 如果 SQL Server 容器的 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。 可以使用以下命令查看容器内的 SQL Server 错误日志:
docker exec -t sql1 cat /var/opt/mssql/log/errorlog | grep connection
如前所述的 --hostname 参数将容器的内部名称更改为自定义值。 此值是以下 Transact-SQL 查询中返回的名称:
SELECT @@SERVERNAME,
SERVERPROPERTY('ComputerNamePhysicalNetBIOS'),
SERVERPROPERTY('MachineName'),
SERVERPROPERTY('ServerName');
将 --hostname 和 --name 设为相同的值是一种很好的方法,可以轻松地识别目标容器。
最后一步,在生产环境中更改 SA 密码,因为 MSSQL_SA_PASSWORD 在 ps -eax 输出中可见,并存储在同名的环境变量中。
4、连接到 SQL Server
下列步骤在容器内部使用 SQL Server 命令行工具 sqlcmd 实用程序 来连接 SQL Server。
使用 docker exec -it 命令在运行的容器内部启动交互式 Bash Shell。 在下面的示例中,sql1 是在创建容器时由 --name 参数指定的名称。
docker exec -it sql1 "bash"
在容器内部使用完整路径通过 sqlcmd 进行本地连接。
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid> -P "<password>"
默认情况下,sqlcmd 的最新版本是安全的。 有关连接加密的详细信息,请参阅 sqlcmd 实用工具(对于 Windows)和使用 sqlcmd 进行连接(对于 Linux 和 macOS)。 如果连接不成功,则可以将 -No 选项添加到 sqlcmd,以指定加密是可选的,而不是强制性的。
可以省略命令行上提示要输入的密码。 例如:
/opt/mssql-tools18/bin/sqlcmd -S localhost -U <userid>
如果成功,应会显示 sqlcmd 命令提示符:1>。
至此在Linux上运行 SQL Server 的容器已经成功,也可使用别的数据库管理工具来连接,如下使用DBeaver进行连接
5、使用 Dbeaver 连接 SQL Server 2019

完成对应主机IP、端口、SA密码填写即可

更多推荐
所有评论(0)