【发布时间】:2022-10-04 23:06:42
【问题描述】:
我在 Java/maven 项目中的单元和集成测试中使用 Testcontainer。测试按预期工作,直到我运行我用来工作的 VPN。 使用 VPN,我可以看到错误消息“无法在 localhost:49198 连接到 Ryuk”
以下是完整的日志:
Connected to the target VM, address: '127.0.0.1:50813', transport: 'socket'
2022-10-03 18:01:49.728 INFO --- [ main] o.t.d.DockerClientProviderStrategy : Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties, will try it first
2022-10-03 18:01:50.280 INFO --- [ main] o.t.d.DockerClientProviderStrategy : Found Docker environment with local Unix socket (unix:///var/run/docker.sock)
2022-10-03 18:01:50.282 INFO --- [ main] org.testcontainers.DockerClientFactory : Docker host IP address is localhost
2022-10-03 18:01:50.308 INFO --- [ main] org.testcontainers.DockerClientFactory : Connected to docker:
Server Version: 20.10.16
API Version: 1.41
Operating System: Ubuntu 20.04.3 LTS
Total Memory: 15716 MB
2022-10-03 18:01:50.311 INFO --- [ main] o.t.utility.ImageNameSubstitutor : Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of 'ConfigurationFileImageNameSubstitutor' and 'PrefixingImageNameSubstitutor')
2022-10-03 18:01:50.926 WARN --- [containers-ryuk] o.testcontainers.utility.ResourceReaper : Can not connect to Ryuk at localhost:49198
java.net.SocketException: Connection reset
at java.base/sun.nio.ch.NioSocketImpl.implRead(NioSocketImpl.java:323)
at java.base/sun.nio.ch.NioSocketImpl.read(NioSocketImpl.java:350)
at java.base/sun.nio.ch.NioSocketImpl$1.read(NioSocketImpl.java:803)
at java.base/java.net.Socket$SocketInputStream.read(Socket.java:966)
at java.base/sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:270)
at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:313)
at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:188)
at java.base/java.io.InputStreamReader.read(InputStreamReader.java:177)
at java.base/java.io.BufferedReader.fill(BufferedReader.java:162)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:329)
at java.base/java.io.BufferedReader.readLine(BufferedReader.java:396)
at org.testcontainers.utility.ResourceReaper$FilterRegistry.waitForAcknowledgment(ResourceReaper.java:489)
at org.testcontainers.utility.ResourceReaper$FilterRegistry.register(ResourceReaper.java:485)
at org.testcontainers.utility.ResourceReaper.lambda$null$1(ResourceReaper.java:203)
at org.rnorth.ducttape.ratelimits.RateLimiter.doWhenReady(RateLimiter.java:27)
at org.testcontainers.utility.ResourceReaper.lambda$start$2(ResourceReaper.java:185)
at java.base/java.lang.Thread.run(Thread.java:833)
我尝试了多种方法,例如将 TESTCONTAINERS_HOST_OVERRIDE 设置为 localhost,但没有成功。 (我不确定它是否被考虑在内,我应该在哪里设置这个变量?)
我检查了测试容器的 docker 容器,不管有没有 VPN,我看不出有什么区别。
任何想法? 谢谢
【问题讨论】:
-
通常当连接到 vpn 时无法访问 docker 注册表。检查机器中是否有docker image ryuk?
-
是的 ryuk 已经被拉取并且 docker ps 显示它正在运行
-
您在哪个操作系统上使用什么版本的 Docker?你在哪里设置
TESTCONTAINERS_HOST_OVERRIDE?它需要是执行测试过程的环境变量。如果您使用的是原生 Linux,我不确定 Docker 是否透明地支持 VPN,这似乎是 Docker 桌面功能:docs.docker.com/desktop/networking -
我使用的是 Linux (Ubuntu),我使用的是 Docker 版本 20.10.16,构建 aa7e414。我试图从 .bashrc 设置它,但现在我在我的 IDE 中设置它,它为我运行测试,它被考虑在内。但是,将其设置为 localhost、127.0.0.1、0.0.0.0 甚至 172.17.0.4(这是容器的主机名)都不起作用。我正在检查您发送的文档,谢谢
标签: java docker-networking testcontainers