Docker部署集成Testcontainers的Spring应用出现无法连接Ryuk错误
故障排查及解决办法
核心问题1:依赖作用域配置错误
Testcontainers为测试专用工具,你当前错误将其配置为生产运行时依赖,导致生产Jar包中包含Testcontainers代码,启动时自动初始化并尝试连接Docker创建资源,触发Ryuk连接报错。
修改build.gradle依赖配置,将依赖作用域从implementation调整为testImplementation,仅测试环境生效:
testImplementation 'org.testcontainers:junit-jupiter' testImplementation 'org.testcontainers:postgresql'
修改后重新打包构建镜像,生产启动时不会加载Testcontainers相关逻辑,报错直接消除。
特殊场景:需要在容器内运行Testcontainers(如CI自动化测试)
如果你的业务场景确实需要在容器内部运行Testcontainers逻辑,可选择以下任意一种方案解决macOS Docker Desktop的网络兼容性问题:
- 方案1:添加环境变量指定宿主机地址
启动容器时新增TESTCONTAINERS_HOST_OVERRIDE环境变量,指向Docker Desktop内置的宿主机域名:docker run -v /var/run/docker.sock:/var/run/docker.sock \ -e TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal \ -p 8080:8080 myapplication:latest - 方案2:临时禁用Ryuk资源回收(仅测试场景可用)
若不需要自动清理测试容器,可禁用Ryuk组件规避连接问题,注意该方案会导致废弃容器残留,需要手动清理:docker run -v /var/run/docker.sock:/var/run/docker.sock \ -e TESTCONTAINERS_RYUK_DISABLED=true \ -p 8080:8080 myapplication:latest
内容的提问来源于stack exchange,提问作者lucek091
相关产品推荐
相关产品推荐

