Jenkins容器内Testcontainers无法连接Ryuk的问题及解决
Jenkins容器内运行Testcontainers测试遇Ryuk连接拒绝错误
问题现象
运行测试流水线时出现以下连接错误:
18:36:15.560 [testcontainers-ryuk] WARN org.testcontainers.utility.RyukResourceReaper - Cannot connect to Ryuk at 172.17.0.1:55592 java.net.ConnectException: Connection refused (Connection refused) at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412) at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255) at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237) at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.base/java.net.Socket.connect(Socket.java:609) at org.testcontainers.utility.RyukResourceReaper.lambda$null$0(RyukResourceReaper.java:92) at org.rnorth.ducttape.ratelimits.RateLimiter.doWhenReady(RateLimiter.java:27) at org.testcontainers.utility.RyukResourceReaper.lambda$maybeStart$1(RyukResourceReaper.java:88) at java.base/java.lang.Thread.run(Thread.java:829)
当前环境与尝试的操作
- 启动Jenkins容器的命令:
docker run -v /var/run/docker.sock:/var/run/docker.sock -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 5000:5000 -d --restart always <镜像名>
- 尝试使用
--network="host"启动Jenkins容器,问题仍存在 - 直接在本地机器执行
mvn clean verify运行测试无错误
补充排查信息
将Jenkins容器网络改为bridge(--network="bridge"),并在测试中显式指定网络:
new GenericContainer("mongodb:1..").withNetworkMode("bridge")...
此时Ryuk容器已创建,通过docker network inspect bridge可确认三个容器均连接到bridge网络,但:
- 从Jenkins容器通过网关IP(172.17.0.1)无法telnet连接Ryuk
- 使用Ryuk的IP(172.17.0.2)可以正常连接
- 连接其他容器的网关IP操作正常
解决方案
修改Jenkins容器启动命令中的挂载路径,将:
-v /var/run/docker.sock:/var/run/docker.sock
替换为:
-v /var/run/docker.sock.raw:/var/run/docker.sock
感谢@Kevin Wittek提供的解决方案!
内容的提问来源于stack exchange,提问作者MMC
相关产品推荐
相关产品推荐

