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

Karate Framework连接Docker中SQL Server数据库失败求助

问题解决步骤

核心原因

你的Karate测试运行在Docker容器中,容器内的localhost指向容器自身,而非运行SQL Server的容器,因此无法通过localhost:1433连接到数据库。

具体修复方案

1. 确保两个容器处于同一Docker网络

Docker容器默认处于各自的网络命名空间,需将SQL Server容器和Karate测试容器加入同一网络:

  • 创建自定义网络:
    docker network create sql-test-network
    
  • 启动SQL Server容器时指定该网络和容器名称:
    docker run -d --name sql-server --network sql-test-network -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=你的密码" mcr.microsoft.com/mssql/server:latest
    
  • 启动Karate测试容器时同样加入该网络:
    docker run --network sql-test-network 你的-karate-test-image
    

2. 修改JDBC连接URL

将Karate脚本中的localhost替换为SQL Server容器的名称(比如上面的sql-server):

Background:
- def config = { username: 'sa', password: '*******', url: 'jdbc:sqlserver://sql-server:1433;databaseName=abc', driverClassName: 'com.microsoft.sqlserver.jdbc.SQLServerDriver' }

3. 修正SQL语句格式

你的readRows方法中SQL语句多了一层单引号,会导致语法错误,需去掉:

Scenario: Read Rows in question Table
- def question = db.readRows("select * from question")

4. 额外检查项

  • 确认SQL Server容器的SA_PASSWORD和脚本中配置的一致;
  • 确保SQL Server容器正常启动,可通过docker logs sql-server查看日志确认服务已就绪;
  • 若使用Docker Compose管理容器,可直接在配置文件中定义网络,容器间通过服务名互相访问。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:47:47