如何在Windows Docker容器中启用SQL Server 2022的FILESTREAM?
在Docker Windows容器中启用SQL Server 2022 FILESTREAM的正确步骤
一、先验证SQL实例的FILESTREAM配置(T-SQL)
首先确认SQL层面的配置是否生效,执行以下T-SQL:
EXEC sp_configure 'filestream_access_level'; RECONFIGURE;
若run_value不是2(本地完全访问)或3(允许远程访问),执行以下命令修改:
EXEC sp_configure 'filestream_access_level', 2; -- 按需选2或3 RECONFIGURE;
二、容器内通过PowerShell配置Windows级FILESTREAM
SQL Server Configuration Manager本质是修改注册表,在Server Core容器中直接操作注册表:
- 执行PowerShell命令修改注册表项(默认实例):
# 设置FILESTREAM启用级别,2为本地访问,3为远程访问 Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\Filestream" -Name "EnableLevel" -Value 2 # 设置FILESTREAM共享名,默认是MSSQLSERVER Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\Filestream" -Name "ShareName" -Value "MSSQLSERVER"
注意:如果是命名实例,需将路径中的
MSSQL16.MSSQLSERVER替换为实例对应的注册表路径(比如MSSQL16.YOUR_INSTANCE_NAME),可通过Get-ChildItem HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server查看所有实例路径。
- 重启SQL Server服务使配置生效:
# 默认实例服务名 Restart-Service -Name MSSQLSERVER # 命名实例服务名格式为MSSQL$YOUR_INSTANCE_NAME # Restart-Service -Name MSSQL$YOUR_INSTANCE_NAME
三、容器启动时预先配置FILESTREAM(可选)
如果是新建容器,可在启动时直接完成配置,避免重复操作:
Dockerfile方式
FROM mcr.microsoft.com/windows/servercore:ltsc2019 # 此处添加SQL Server 2022 Developer版的安装步骤(参考官方文档) # 配置FILESTREAM并重启服务 RUN powershell -Command \ Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\Filestream" -Name "EnableLevel" -Value 2; \ Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\Filestream" -Name "ShareName" -Value "MSSQLSERVER"; \ Restart-Service -Name MSSQLSERVER
docker run命令方式
docker run -d -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrongPassword123" ` --name sql2022-filestream ` mcr.microsoft.com/mssql/server:2022-latest-windows ` powershell -Command "Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\Filestream' -Name 'EnableLevel' -Value 2; Set-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQLServer\Filestream' -Name 'ShareName' -Value 'MSSQLSERVER'; Restart-Service -Name MSSQLSERVER"
四、验证FILESTREAM是否启用成功
- 再次执行T-SQL确认配置:
EXEC sp_configure 'filestream_access_level';
确保run_value为2或3。
- 检查Windows共享是否存在:
Get-SmbShare | Where-Object Name -eq "MSSQLSERVER"
应能看到对应的共享条目。
- 创建测试表验证功能:
CREATE DATABASE TestFilestream; GO USE TestFilestream; GO CREATE TABLE TestFS ( ID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE, FileData VARBINARY(MAX) FILESTREAM NULL ); GO
若能成功创建表,说明FILESTREAM已正常启用。
常见排查点
- 注册表路径错误:确认实例对应的注册表路径,避免默认实例和命名实例混淆。
- 服务未重启:修改注册表后必须重启SQL Server服务,否则配置不会生效。
- 权限问题:确保容器运行账号有修改注册表和重启服务的权限,官方SQL Server容器默认账号具备该权限。
内容的提问来源于stack exchange,提问作者user23665455
相关产品推荐
相关产品推荐

