Ich habe keine Ahnung, was hier vor sich geht, aber es scheint mit der Aktualisierung des Docker-Desktops auf dem Mac auf die neueste Version zusammengefallen zu sein:
Gradle Test Executor 2 > org.hibernate.reactive.FilterTest > testFilterCollectionFetch FAILED
org.testcontainers.containers.ContainerLaunchException: Container startup failed
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:330)
at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:311)
at org.hibernate.reactive.containers.PostgreSQLDatabase.getJdbcUrl(PostgreSQLDatabase.java:39)
at org.hibernate.reactive.containers.DatabaseConfiguration.getJdbcUrl(DatabaseConfiguration.java:78)
at org.hibernate.reactive.BaseReactiveTest.constructConfiguration(BaseReactiveTest.java:88)
at org.hibernate.reactive.FilterTest.constructConfiguration(FilterTest.java:26)
Caused by:
org.testcontainers.containers.ContainerFetchException: Can't get Docker image: RemoteDockerImage(imageName=postgres:13.0, imagePullPolicy=DefaultPullPolicy())
at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1279)
at org.testcontainers.containers.GenericContainer.logger(GenericContainer.java:613)
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:320)
... 5 more
Caused by:
java.lang.IllegalStateException: Can not connect to Ryuk at localhost:32768
at org.testcontainers.utility.ResourceReaper.start(ResourceReaper.java:176)
at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:168)
at org.testcontainers.LazyDockerClient.getDockerClient(LazyDockerClient.java:14)
at org.testcontainers.LazyDockerClient.listImagesCmd(LazyDockerClient.java:12)
at org.testcontainers.images.LocalImagesCache.maybeInitCache(LocalImagesCache.java:68)
at org.testcontainers.images.LocalImagesCache.get(LocalImagesCache.java:32)
at org.testcontainers.images.AbstractImagePullPolicy.shouldPull(AbstractImagePullPolicy.java:18)
at org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:59)
at org.testcontainers.images.RemoteDockerImage.resolve(RemoteDockerImage.java:26)
at org.testcontainers.utility.LazyFuture.getResolvedValue(LazyFuture.java:20)
at org.testcontainers.utility.LazyFuture.get(LazyFuture.java:27)
at org.testcontainers.containers.GenericContainer.getDockerImageName(GenericContainer.java:1277)
... 7 more
java.lang.NullPointerException
at org.hibernate.reactive.BaseReactiveTest.after(BaseReactiveTest.java:156)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at io.vertx.ext.unit.junit.VertxUnitRunner.invokeTestMethod(VertxUnitRunner.java:95)
at io.vertx.ext.unit.junit.VertxUnitRunner.lambda$invokeExplosively$0(VertxUnitRunner.java:114)
at io.vertx.ext.unit.impl.TestContextImpl.run(TestContextImpl.java:90)
at io.vertx.ext.unit.junit.VertxUnitRunner.invokeExplosively(VertxUnitRunner.java:130)
at io.vertx.ext.unit.junit.VertxUnitRunner.access$000(VertxUnitRunner.java:39)
at io.vertx.ext.unit.junit.VertxUnitRunner$3.evaluate(VertxUnitRunner.java:217)
at io.vertx.ext.unit.junit.Timeout$1.evaluate(Timeout.java:45)
at org.junit.rules.RunRules.evaluate(RunRules.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:110)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:38)
at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:62)
at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:119)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:182)
at org.gradle.internal.remote.internal.hub.MessageHubBackedObjectConnection$DispatchWrapper.dispatch(MessageHubBackedObjectConnection.java:164)
at org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:414)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
at java.lang.Thread.run(Thread.java:748)
Irgendwelche Ideen @Sanne , @DavideD ?
Was ist ein Ryuk und warum sollte er unter localhost:32768 laufen
Oh, warte, ich habe das gerade gefunden: https://github.com/testcontainers/testcontainers-java/issues/3241
PosgreSQL hat vor kurzem Version 13 veröffentlicht, daher habe ich unsere Testimages neu konfiguriert, um das Image postgres:13.0
. Klingt so, als ob Sie es nicht herunterladen können?
Seltsam, es ist angeblich nicht anders als die vorherigen Versionen zu holen.
PosgreSQL hat vor kurzem Version 13 veröffentlicht, daher habe ich unsere Testimages neu konfiguriert, um das Image
postgres:13.0
. Klingt so, als ob Sie es nicht herunterladen können?
Ich denke – aber ich bin mir nicht sicher – dass ich es bereits auf Postgres 13 hatte, bis ich Docker aktualisierte.
Das erste Mal, wenn ich von Ryuk
höre.
Es ist für das Abrufen von Bildern im Auftrag von Testcontainern verantwortlich - daher würde dies auslösen, wenn kein neuer Container (wie postgresql 13) vorhanden ist.
Scheint ein Fehler in Testcontainern zu sein.
Sie können es möglicherweise umgehen, indem Sie den Container einmal manuell herunterladen?
Versuchen
docker run --rm -it --name HibernateTestingPGSQL \
-e POSTGRES_USER=hreact -e POSTGRES_PASSWORD=hreact -e POSTGRES_DB=hreact \
-p 5432:5432 postgres:13.0
Der Wechsel zu testcontainers 1.15.0-rc2 scheint es für mich behoben zu haben.
Cool.
Alternativ: https://www.testcontainers.org/features/configuration/#disabling -ryuk
Alternativ: https://www.testcontainers.org/features/configuration/#disabling -ryuk
Ja, das hat funktioniert.
Gibt es eine richtige Möglichkeit, eine Umgebungsvariable aus dem Gradle-Skript zu setzen?
Anscheinend:
test {
environment "TESTCONTAINERS_RYUK_DISABLED", "true"
stimmt, das sollte reichen.
Übrigens, bitte drücke noch ein paar Minuten :) Release läuft
Release erledigt.. Ich mache jetzt die Quarkus-Updates.
Release erledigt.. Ich mache jetzt die Quarkus-Updates.
Exzellent!
Ist das immer noch ein Thema?
Ich glaube, der Fehler ist immer noch da, aber die einzigen Leute, die ihn erleben werden, sind Leute, die das Ding noch nicht auf ihren lokalen Computer geholt haben.
Ich frage mich also, ob dies durch die Notwendigkeit verursacht wurde, die Testdatenbank bei der Migration von Postgres 12 auf 13 zu aktualisieren?
Sehen Sie, ich habe testcontainers.reuse.enable=true
gesetzt, was vielleicht die Datenbank zwischen Testläufen wiederverwendet?
Ich glaube nicht, dass wir dieses Upgrade auf PostgreSQL 13 unbedingt _brauchen_ ?
AFAIR als ich es aktualisiert habe, musste ich keine entsprechenden Änderungen vornehmen, daher würde ich erwarten, dass auch auf 12 alles gut funktioniert - es sei denn, es wurde zwischenzeitlich eine Regression aufgenommen, aber das scheint weniger wahrscheinlich zu sein, als Probleme mit Docker/ Testcontainer.
Vielleicht versuchen Sie, die Konfiguration auf 12 zurückzusetzen und zu sehen?
Ich erlebe das wieder :-(
Sehen Sie, ich habe
testcontainers.reuse.enable=true
gesetzt, was vielleicht die Datenbank zwischen Testläufen wiederverwendet?
Ich habe es auf false gesetzt und es hat das Problem nicht behoben.
environment "TESTCONTAINERS_RYUK_DISABLED", "true"
Dies hat es wieder behoben.
@Sanne Denkst du, ich sollte diese Änderung auf das Gradle-Skript übertragen?
Ja sicher warum nicht. Es scheint ein neues Feature zu sein, und wir waren bisher ohne es glücklich.
Es ist für das Abrufen von Bildern im Auftrag von Testcontainern verantwortlich - daher würde dies auslösen, wenn kein neuer Container (wie postgresql 13) vorhanden ist.
Es ist eigentlich dafür verantwortlich, die Container nach dem Ausführen der Tests zu beenden. Wenn Sie die JVM beenden, werden die Shutdown-Hooks nicht ausgeführt und die Container laufen weiter und erzeugen baumelnde Container.
Die Umgebungsvariable gibt es für CI-Systeme, bei denen Ryuk nicht verwendet werden kann (zB BitBucket Pipelines), aber sie garantieren die Bereinigung selbst.
tl; dr: Ryuk nicht deaktivieren ;)
Wenn Sie die JVM beenden, werden die Shutdown-Hooks nicht ausgeführt und die Container laufen weiter und erzeugen baumelnde Container.
Nun, TBH, ich laufe immer mit testcontainers.reuse.enable=true
, also denke ich, dass das sowieso passiert.
Und unter dem Strich sind baumelnde Container weniger schlimm als meine Tests, die einfach nicht laufen. :-)
Aber sicher, wenn dies in 1.15 behoben ist (das erst vor zwei Tagen herauskam, denke ich), dann ist das großartig, und wir werden stattdessen einfach aktualisieren.
Danke für die Erklärung, dass @bsideup !
Hilfreichster Kommentar
Der Wechsel zu testcontainers 1.15.0-rc2 scheint es für mich behoben zu haben.