-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Description
Module
Core
Testcontainers version
1.17.6
Using the latest Testcontainers version?
Yes
Host OS
macOS Ventura 13.1 (22C65)
Host Arch
ARM
Docker version
$ docker version
Client: Docker Engine - Community
Version: 20.10.23
API version: 1.41
Go version: go1.19.5
Git commit: 715524332f
Built: Wed Jan 18 20:42:16 2023
OS/Arch: darwin/arm64
Context: default
Experimental: true
Server:
Engine:
Version: 20.10.20
API version: 1.41 (minimum version 1.12)
Go version: go1.18.7
Git commit: 03df974ae9e6c219862907efdd76ec2e77ec930b
Built: Wed Oct 19 02:58:31 2022
OS/Arch: linux/arm64
Experimental: false
containerd:
Version: v1.6.8
GitCommit: 9cd3357b7fd7218e4aec3eae239db1f68a5a6ec6
runc:
Version: 1.1.4
GitCommit: 5fd4c4d144137e991c4acebb2146ab1483a97925
docker-init:
Version: 0.19.0
GitCommit:What happened?
See the simple reproducer case in https://github.com/skagedal/testcontainers-hello. This has a test case that simply spins up a MySQL container using testcontainers. I run it with an environment as described here, i.e. with the TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE and DOCKER_HOST environment variables set (but not the TESTCONTAINERS_HOST_OVERRIDE):
$ echo $DOCKER_HOST
unix:///Users/simon/.colima/docker.sock
$ echo $TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE
/var/run/docker.sock
$ echo $TESTCONTAINERS_HOST_OVERRIDE
When running the project, I get many log warnings about being unable to connect to Ryuk:
$ ./gradlew test --rerun-tasks
> Task :app:test
AppTest > testcontainers_mysql() STANDARD_ERROR
[Test worker] INFO org.testcontainers.utility.ImageNameSubstitutor - Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of 'ConfigurationFileImageNameSubstitutor' and 'PrefixingImageNameSubstitutor')
[Test worker] INFO org.testcontainers.dockerclient.DockerClientProviderStrategy - Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties, will try it first
[Test worker] INFO org.testcontainers.dockerclient.DockerClientProviderStrategy - Found Docker environment with Environment variables, system properties and defaults. Resolved dockerHost=unix:///Users/simon/.colima/docker.sock
[Test worker] INFO org.testcontainers.DockerClientFactory - Docker host IP address is localhost
[Test worker] INFO org.testcontainers.DockerClientFactory - Connected to docker:
Server Version: 20.10.20
API Version: 1.41
Operating System: Alpine Linux v3.16
Total Memory: 11949 MB
[Test worker] INFO org.testcontainers.DockerClientFactory - Checking the system...
[Test worker] INFO org.testcontainers.DockerClientFactory - βοΈ Docker server version should be at least 1.6.0
[Test worker] INFO π³ [mysql:8.0.31] - Creating container for image: mysql:8.0.31
[Test worker] INFO π³ [testcontainers/ryuk:0.3.4] - Creating container for image: testcontainers/ryuk:0.3.4
[Test worker] INFO π³ [testcontainers/ryuk:0.3.4] - Container testcontainers/ryuk:0.3.4 is starting: 0e8b1edeb20fa240b4ec4a8897c994124ed0d9abfd8c48ac50897af1e685318c
[Test worker] INFO π³ [testcontainers/ryuk:0.3.4] - Container testcontainers/ryuk:0.3.4 started in PT0.490917S
[testcontainers-ryuk] WARN org.testcontainers.utility.RyukResourceReaper - Can not connect to Ryuk at localhost:49155
java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672)
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:633)
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:833)
[testcontainers-ryuk] WARN org.testcontainers.utility.RyukResourceReaper - Can not connect to Ryuk at localhost:49155
java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672)
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:633)
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:833)
[testcontainers-ryuk] WARN org.testcontainers.utility.RyukResourceReaper - Can not connect to Ryuk at localhost:49155
java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672)
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:542)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:633)
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:833)
[testcontainers-ryuk] WARN org.testcontainers.utility.RyukResourceReaper - Can not connect to Ryuk at localhost:49155
java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672)
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:633)
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:833)
[testcontainers-ryuk] WARN org.testcontainers.utility.RyukResourceReaper - Can not connect to Ryuk at localhost:49155
java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672)
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:633)
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:833)
[testcontainers-ryuk] WARN org.testcontainers.utility.RyukResourceReaper - Can not connect to Ryuk at localhost:49155
java.net.ConnectException: Connection refused
at java.base/sun.nio.ch.Net.pollConnect(Native Method)
at java.base/sun.nio.ch.Net.pollConnectNow(Net.java:672)
at java.base/sun.nio.ch.NioSocketImpl.timedFinishConnect(NioSocketImpl.java:549)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:597)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:327)
at java.base/java.net.Socket.connect(Socket.java:633)
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:833)
[Test worker] INFO π³ [mysql:8.0.31] - Container mysql:8.0.31 is starting: 30f0ab5cad5fcf6ef4413c8949f2a069414557d40b4dc18a1d15d4af76c7153b
[Test worker] INFO π³ [mysql:8.0.31] - Waiting for database connection to become available at jdbc:mysql://localhost:49156/test using query 'SELECT 1'
[Test worker] INFO π³ [mysql:8.0.31] - Container is started (JDBC URL: jdbc:mysql://localhost:49156/test)
[Test worker] INFO π³ [mysql:8.0.31] - Container mysql:8.0.31 started in PT11.480455S
AppTest > testcontainers_mysql() STANDARD_OUT
Version is: 8.0.31
BUILD SUCCESSFUL in 13s
3 actionable tasks: 3 executed
I'm unsure if this means that it eventually manages to connect to Ryuk or not, but in any case the warnings are unwanted.
If I also add the environment variable TESTCONTAINERS_HOST_OVERRIDE to the IP address that colima listens to, as suggested by this comment, then things run smoothly:
$ echo $TESTCONTAINERS_HOST_OVERRIDE
192.168.106.2
$ ./gradlew test --rerun-tasks
> Task :app:test
AppTest > testcontainers_mysql() STANDARD_ERROR
[Test worker] INFO org.testcontainers.utility.ImageNameSubstitutor - Image name substitution will be performed by: DefaultImageNameSubstitutor (composite of 'ConfigurationFileImageNameSubstitutor' and 'PrefixingImageNameSubstitutor')
[Test worker] INFO org.testcontainers.dockerclient.DockerClientProviderStrategy - Loaded org.testcontainers.dockerclient.UnixSocketClientProviderStrategy from ~/.testcontainers.properties, will try it first
[Test worker] INFO org.testcontainers.dockerclient.DockerClientProviderStrategy - Found Docker environment with Environment variables, system properties and defaults. Resolved dockerHost=unix:///Users/simon/.colima/docker.sock
[Test worker] INFO org.testcontainers.DockerClientFactory - Docker host IP address is 192.168.106.2
[Test worker] INFO org.testcontainers.DockerClientFactory - Connected to docker:
Server Version: 20.10.20
API Version: 1.41
Operating System: Alpine Linux v3.16
Total Memory: 11949 MB
[Test worker] INFO org.testcontainers.DockerClientFactory - Checking the system...
[Test worker] INFO org.testcontainers.DockerClientFactory - βοΈ Docker server version should be at least 1.6.0
[Test worker] INFO π³ [mysql:8.0.31] - Creating container for image: mysql:8.0.31
[Test worker] INFO π³ [testcontainers/ryuk:0.3.4] - Creating container for image: testcontainers/ryuk:0.3.4
[Test worker] INFO π³ [testcontainers/ryuk:0.3.4] - Container testcontainers/ryuk:0.3.4 is starting: a49651f0b12d297e648f5fbfc44337d2352b3cd73b5db451073735264e710b51
[Test worker] INFO π³ [testcontainers/ryuk:0.3.4] - Container testcontainers/ryuk:0.3.4 started in PT0.516247S
[Test worker] INFO π³ [mysql:8.0.31] - Container mysql:8.0.31 is starting: 8e162a50412fc9e13edeff34c960f736f0bc7a87c792a371c1910bb89ef458e0
[Test worker] INFO π³ [mysql:8.0.31] - Waiting for database connection to become available at jdbc:mysql://192.168.106.2:49158/test using query 'SELECT 1'
[Test worker] INFO π³ [mysql:8.0.31] - Container is started (JDBC URL: jdbc:mysql://192.168.106.2:49158/test)
[Test worker] INFO π³ [mysql:8.0.31] - Container mysql:8.0.31 started in PT8.849308S
AppTest > testcontainers_mysql() STANDARD_OUT
Version is: 8.0.31
BUILD SUCCESSFUL in 10s
3 actionable tasks: 3 executed
(This setup also seems to helps with better connectivity to other testcontainers in our properietary code, however I was not able to create a reproducer for this.)
Relevant log output
No response
Additional Information
Colima version and status:
$ colima version
colima version 0.5.2
git commit: 6b5b6fe0540e708f0c9d6e8919fab292c671fc72
runtime: docker
arch: aarch64
client: v20.10.23
server: v20.10.20
testcontainers-hello on ξ main via β v17.0.6 on βοΈ (eu-west-1)
$ colima status
INFO[0000] colima is running using QEMU
INFO[0000] arch: aarch64
INFO[0000] runtime: docker
INFO[0000] mountType: sshfs
INFO[0000] address: 192.168.106.2
INFO[0000] socket: unix:///Users/simon/.colima/default/docker.sock