【问题标题】:Testcontainer with VPN on: Can not connect to Ryuk at localhost:49198开启 VPN 的测试容器:无法在 localhost:49198 连接到 Ryuk
【发布时间】: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


【解决方案1】:

问题解决了: VPN 使用与 Docker 相同的 IP 范围,这意味着冲突。 我通过创建一个包含另一个范围的 /etc/docker/daemon.json 文件并重新启动 docker 来更改 Docker 的基本 IP 范围来解决(您可以在此处查看:https://medium.com/codebrace/understanding-docker-networks-and-resolving-conflict-with-docker-subnet-ip-range-bfaad092a7ea

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 2022-07-20
    • 2021-12-10
    • 2020-09-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-22
    • 2018-03-19
    • 2019-04-01
    相关资源
    最近更新 更多