Testcontainers在容器(Jenkins容器)中运行测试无法连接到Ryuk

am46iovg  于 2022-12-03  发布在  Jenkins
关注(0)|答案(1)|浏览(235)

我有Jenkins的容器。我尝试在此容器内运行测试管道。测试使用Testcontainers。我正在与错误作斗争:

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 <img>
我曾尝试使用--network="host"运行Jenkins容器,但效果相同。
当我通过mvn clean verify直接在本地计算机上运行这些测试时,测试通过,并且没有出现此错误。
编辑:
我已经将Jenkins容器的网络更改为bridge--network="bridge")。在测试中,我使用了显式网络bridge

new GenericContainer("mongodb:1..").withNetworkMode("bridge")...

已创建Ryuk容器(我可以在我的主机Docker上看到三个集装箱- Jenkins、Mongo当我运行docker network inspect bridge时,我可以看到三个容器连接到它。但是当我尝试使用gateway连接到Ryuk容器时(172.17.0.1)从Jenkins容器使用telenet这是不可能的。但当我使用Ryuk IP(172.17.0.2)而不是gateway的IP,我可以连接。然后我在我的主机上创建了其他容器,并试图通过gateway的IP从Jenkins容器连接到它-可以做到这一点。

解决方案

只需使用-v /var/run/docker.sock.raw:/var/run/docker.sock而不是-v /var/run/docker.sock:/var/run/docker.sock运行Jenkins容器。谢谢@Kevin Wittek!

cotxawn7

cotxawn71#

正如其中一条评论中提到的,这源于Java Testcontainers中的an issue,涉及Docker Desktop中的上游更改(参见本期)。
Mac的当前解决方法是在创建容器时挂载原始套接字:

-v /var/run/docker.sock.raw:/var/run/docker.sock

相关问题