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

Windows下Spring Boot Jenkins CI/CD中TestContainers无法连接Ryuk

Windows环境下Jenkins流水线Testcontainers Ryuk连接失败解决方案

当在Windows环境通过Docker运行Jenkins执行Spring Boot集成测试时,Testcontainers的Ryuk容器出现Connection refused错误,而Linux环境正常,可通过以下方法解决:

1. 配置Testcontainers使用正确的宿主机地址

Windows Docker Desktop中,容器访问宿主机的默认别名是host.docker.internal,而非Linux环境的172.17.0.1。需要给Jenkins容器添加环境变量,让Testcontainers识别正确的宿主机:

修改docker-compose.yml的jenkins服务环境变量:

services:
  jenkins:
    # ... 其他原有配置
    environment:
      JAVA_OPTS: "-Djenkins.install.runSetupWizard=false"
      TESTCONTAINERS_HOST_OVERRIDE: host.docker.internal

或者在Jenkinsfile的测试阶段直接设置该变量:

stage('Run Tests') {
    steps {
        withEnv(['TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal']) {
            sh './mvnw clean test'
        }
    }
}

2. 调整Docker Socket挂载配置(WSL2后端场景)

若使用WSL2作为Docker Desktop后端,确保Docker Socket挂载路径正确,同时保证Jenkins容器内用户有权限访问:

  • 确认docker-compose.yml中的Socket挂载路径正确:
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    
  • 若仍有权限问题,在WSL2终端中执行以下命令赋予Socket足够权限:
    sudo chmod 666 /var/run/docker.sock
    

3. 临时禁用Ryuk(调试用)

若需快速验证测试流程,可临时禁用Ryuk资源回收器(不推荐长期使用,会导致容器资源无法自动清理):
在docker-compose.yml中添加环境变量:

services:
  jenkins:
    # ... 其他原有配置
    environment:
      TESTCONTAINERS_RYUK_DISABLED: true

4. 更新Testcontainers版本

旧版本Testcontainers对Windows Docker网络兼容性较差,升级到最新稳定版(如1.19.x及以上)可解决多数网络适配问题。修改Spring Boot项目的pom.xml:

<dependency>
    <groupId>org.testcontainers</groupId>
    <artifactId>testcontainers</artifactId>
    <version>1.19.3</version>
    <scope>test</scope>
</dependency>
<!-- 对应数据库等其他Testcontainers依赖也同步升级版本 -->

验证步骤

  1. 停止并删除现有Jenkins容器:docker-compose down
  2. 重新构建并启动容器:docker-compose up -d --build
  3. 重新触发Jenkins流水线,检查测试阶段是否正常执行

内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:43:15