You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何禁止以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地址,拒绝外部网络连接:

    1. 进入目标容器:
      docker exec -it <容器ID或名称> bash
      
    2. 用sqlcmd连接本地SQL Server:
      /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "YourStrongPassw0rd"
      
    3. 执行SQL命令禁用远程访问并重启生效:
      EXEC sp_configure 'remote access', 0;
      RECONFIGURE;
      

    或者直接修改SQL Server配置文件/var/opt/mssql/mssql.conf,添加以下内容:

    [network]
    ipaddress = 127.0.0.1
    
    1. 重启容器使配置生效:
      docker restart <容器ID或名称>
      
  • 使用Docker内部网络隔离
    创建一个仅允许内部容器通信的Docker网络,将SQL Server容器加入该网络,避免外部访问:

    1. 创建内部专用网络:
      docker network create --internal sql-internal-net
      
    2. 启动容器时指定该网络:
      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端口的外部连接。

内容的提问来源于stack exchange,提问作者gartenkralle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 09:00:06