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

无法在Docker容器中启动Testcontainers测试容器

Testcontainers在TeamCity代理容器中连接Ryuk失败的解决方案

本地运行Testcontainers时一切正常,但在Docker化的TeamCity代理中执行测试时,出现无法连接Ryuk的异常,报错信息如下:

Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.IllegalStateException: Could not connect to Ryuk at 172.17.0.1:63964 [in thread "Test worker"]
    at org.testcontainers.utility.RyukResourceReaper.maybeStart(RyukResourceReaper.java:145)
    at org.testcontainers.utility.RyukResourceReaper.init(RyukResourceReaper.java:42)
    at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:232)
    at org.testcontainers.DockerClientFactory$1.getDockerClient(DockerClientFactory.java:106)
    at com.github.dockerjava.api.DockerClientDelegate.authConfig(DockerClientDelegate.java:109)
    at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:332)
    at com.kamcci.numberbox.infra.orm.jpa.adapter.config.MysqlTCExtension.<clinit>(MysqlTCExtension.kt:20)

对应的TeamCity代理docker-compose配置:

teamcity-agent-1:  
image: jetbrains/teamcity-agent:latest  
depends_on:  
  - teamcity  
container_name: agent011  
restart: always   
ports:  
  - 9081:9090  
volumes:  
  - ./agents/agent-1/conf:/data/teamcity_agent/conf  
  - /var/run/docker.sock:/var/run/docker.sock  
environment:  
  - SERVER_URL=http://teamcity:8111  
  - AGENT_NAME=agent011  
  - DOCKER_IN_DOCKER=start  

解决方案

  • 指定宿主机IP覆盖
    Ryuk默认尝试连接Docker网关IP,但容器环境下可能无法正常访问。添加环境变量TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal,让Testcontainers通过这个通用域名访问宿主机,解决网络连通问题。

  • 调整Docker-in-Docker配置
    当前配置中DOCKER_IN_DOCKER=start会在代理容器内启动独立的Docker守护进程,导致网络隔离。如果不需要内部Docker环境,直接去掉这个环境变量,让代理使用宿主机的Docker daemon,简化网络连通逻辑。

  • 临时禁用Ryuk
    如果不需要自动清理测试容器的功能,可以设置TESTCONTAINERS_RYUK_DISABLED=true绕过连接检查,但测试结束后需要手动清理残留容器。

  • 确保Docker套接字权限
    确认代理容器内的用户有权限访问挂载的/var/run/docker.sock,可以通过将容器用户加入docker组,或者临时调整套接字权限(生产环境谨慎使用)。

修改后的docker-compose示例:

teamcity-agent-1:  
  image: jetbrains/teamcity-agent:latest  
  depends_on:  
    - teamcity  
  container_name: agent011  
  restart: always   
  ports:  
    - 9081:9090  
  volumes:  
    - ./agents/agent-1/conf:/data/teamcity_agent/conf  
    - /var/run/docker.sock:/var/run/docker.sock  
  environment:  
    - SERVER_URL=http://teamcity:8111  
    - AGENT_NAME=agent011  
    - TESTCONTAINERS_HOST_OVERRIDE=host.docker.internal
    # 可选:禁用Ryuk
    # - TESTCONTAINERS_RYUK_DISABLED=true

内容的提问来源于stack exchange,提问作者정요직

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 19:45:03