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
相关产品推荐
相关产品推荐

