如何禁止以Docker容器运行的SQL Server的远程访问?
阻止Docker容器中SQL Server的远程访问方法
以下是几种可行的方法,从端口隔离到SQL Server本身配置,按需选择:
移除端口映射(最直接)
默认运行SQL Server容器时,通常会用-p 1433:1433参数将容器内的1433端口映射到主机端口。直接删除这个端口映射参数,容器内的SQL Server端口就只会暴露在Docker内部网络中,外部主机无法直接访问。
示例修改后的启动命令:docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrongPassw0rd" -d mcr.microsoft.com/mssql/server:2022-latest修改SQL Server监听配置
让SQL Server仅监听容器内部的localhost地址,拒绝外部网络连接:- 进入目标容器:
docker exec -it <容器ID或名称> bash - 用sqlcmd连接本地SQL Server:
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "YourStrongPassw0rd" - 执行SQL命令禁用远程访问并重启生效:
EXEC sp_configure 'remote access', 0; RECONFIGURE;
或者直接修改SQL Server配置文件
/var/opt/mssql/mssql.conf,添加以下内容:[network] ipaddress = 127.0.0.1- 重启容器使配置生效:
docker restart <容器ID或名称>
- 进入目标容器:
使用Docker内部网络隔离
创建一个仅允许内部容器通信的Docker网络,将SQL Server容器加入该网络,避免外部访问:- 创建内部专用网络:
docker network create --internal sql-internal-net - 启动容器时指定该网络:
docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=YourStrongPassw0rd" --network sql-internal-net -d mcr.microsoft.com/mssql/server:2022-latest
只有加入同一个
sql-internal-net网络的容器才能访问该SQL Server,外部主机和其他网络的容器均无法连接。- 创建内部专用网络:
主机防火墙拦截
在容器所在主机上配置防火墙规则,拒绝外部对1433端口的访问:- Linux主机(iptables示例):
iptables -A INPUT -p tcp --dport 1433 -j DROP - Windows主机:通过「Windows Defender防火墙高级设置」添加入站规则,阻止TCP 1433端口的外部连接。
- Linux主机(iptables示例):
内容的提问来源于stack exchange,提问作者gartenkralle
相关产品推荐
相关产品推荐

