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

JDBC Sink Connector连接Docker中SQL Server 2019失败求助

解决Kafka Connect JDBC Sink无法连接Docker部署的SQL Server问题

核心问题分析

你遇到的连接失败,本质是Kafka Connect容器(或WSL内的Kafka Connect进程)无法解析sql1这个主机名,或者网络不通导致无法访问SQL Server的1433端口。

分步排查与解决

1. 确认SQL Server的网络可达性

  • 如果Kafka Connect是在Docker容器中运行:
    • 检查SQL Server容器的网络模式:如果Kafka Connect和SQL Server不在同一个Docker网络,要么把它们加入同一网络,要么用宿主机IP访问。
    • 替换连接串中的sql1为WSL的主机IP(别用localhost,容器内的localhost指向自身)。WSL里执行hostname -I就能拿到这个IP。
    • 要是两者在同一Docker网络,直接用SQL Server容器的名称当主机名就行(前提是你启动SQL Server时指定了--name sql1,且Kafka Connect容器也在这个网络里)。
  • 如果Kafka Connect是在WSL Ubuntu宿主机中运行:
    • 先测试WSL内能不能通SQL Server:执行telnet <你的SQL Server容器映射的宿主机IP> 1433或者nc -zv <IP> 1433,不通的话检查Docker端口映射是不是正确(启动SQL Server时有没有加-p 1433:1433参数)。
    • 别用sql1当主机名,除非WSL的/etc/hosts里已经把sql1映射到了正确的IP。

2. 检查SQL Server的连接配置

  • 确认SQL Server容器开了TCP/IP连接:Docker部署的SQL Server默认是开的,也可以进容器验证:
    docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P <你的密码>
    # 执行下面的命令检查TCP状态
    SELECT name, protocol_desc, state_desc FROM sys.dm_exec_connections WHERE session_id = @@SPID;
    
  • 确保连接串里的用户名(默认是SA)、密码、数据库名没拼写错误。

3. 调整Kafka Connect的JDBC Sink配置

修改Sink连接器的connection.url参数:

  • 若Kafka Connect在Docker中,且和SQL Server同网络:
    connection.url=jdbc:sqlserver://sql1:1433;databaseName=<你的数据库名>;encrypt=true;trustServerCertificate=true
    
  • 若Kafka Connect在WSL宿主机:
    connection.url=jdbc:sqlserver://<WSL主机IP>:1433;databaseName=<你的数据库名>;encrypt=true;trustServerCertificate=true
    

注意:必须加encrypt=true;trustServerCertificate=true,因为SQL Server默认要求加密连接,不加可能会出现额外的连接错误。

4. 验证网络连通性

  • Docker容器间连通性测试:在Kafka Connect容器里执行ping sql1或telnet sql1 1433,ping不通的话说明网络隔离,得把两个容器加入同一Docker网络:
    # 创建网络
    docker network create kafka-sql-network
    # 重启SQL Server容器加入网络
    docker run -d --name sql1 --network kafka-sql-network -p 1433:1433 -e "SA_PASSWORD=<你的密码>" -e "ACCEPT_EULA=Y" mcr.microsoft.com/mssql/server:2019-latest
    # 重启Kafka Connect容器加入同一网络
    docker run -d --name kafka-connect --network kafka-sql-network ... <其他Kafka Connect启动参数>
    
  • WSL到SQL Server的连通性:在WSL终端执行nc -zv localhost 1433,返回成功说明端口映射有效;失败的话检查Docker端口是不是被占用,或者SQL Server容器有没有正常运行。

总结

最常见的原因是主机名解析失败或网络隔离,优先检查Kafka Connect和SQL Server的网络环境,替换成正确的主机IP或容器名称,同时确保连接串的加密参数配置正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 05:17:01