Hibernate-reactive: Dockerデスクトップでのテストの動作が停止しました

作成日 2020年10月04日  ·  23コメント  ·  ソース: hibernate/hibernate-reactive

ここで何が起こっているのかわかりませんが、MacのDockerデスクトップを最新バージョンに更新したのと一致しているようです。

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)

@ Sanne@ DavideDのアイデアは

bug testing

最も参考になるコメント

testcontainers 1.15.0-rc2に変更すると、修正されたようです。

全てのコメント23件

Ryukとは何ですか?なぜlocalhost:32768で実行する必要があります

ああ、待って、私はこれを見つけました: https

PosgreSQLは最近バージョン13をリリースしたので、イメージpostgres:13.0を使用するようにテストイメージを再構成しました。 ダウンロードできないようですね。

奇妙なことに、それはおそらく以前のバージョンをフェッチすることと何ら変わりはありません。

PosgreSQLは最近バージョン13をリリースしたので、イメージpostgres:13.0を使用するようにテストイメージを再構成しました。 ダウンロードできないようですね。

Dockerを更新するまで、Postgres13ですでに動作していたと思いますが(よくわかりません)。

初めてRyukについて聞いたとき、私が見つけたごく少数のドキュメント参照から、オプションのローカルサーバーが起動することになっているように見えますか?
Testcontainersに代わって画像をフェッチする責任があるため、新しいコンテナ(postgresql 13など)がないとこれがトリガーされます。

Testcontainersのバグのようです。

コンテナを手動で1回ダウンロードすることで、回避できる可能性がありますか?

試す

docker run --rm -it --name HibernateTestingPGSQL \
    -e POSTGRES_USER=hreact -e POSTGRES_PASSWORD=hreact -e POSTGRES_DB=hreact \
    -p 5432:5432 postgres:13.0

testcontainers 1.15.0-rc2に変更すると、修正されたようです。

いいね。
または、 https ://www.testcontainers.org/features/configuration/#disabling -ryuk

または、 https ://www.testcontainers.org/features/configuration/#disabling -ryuk

うん、それはうまくいった。

Gradleスクリプトから環境変数を設定する正しい方法はありますか?

どうやら:

test {
    environment "TESTCONTAINERS_RYUK_DISABLED", "true"

そうです、それでうまくいくはずです。

ところで、数分間押し続けてください:)リリースが実行されています

リリースが完了しました。Quarkusの更新を今すぐ行います。

リリースが完了しました。Quarkusの更新を今すぐ行います。

優秀な!

これはまだ問題ですか?

バグはまだ残っていると思いますが、バグを経験するのは、ローカルマシンにバグをまだフェッチしていない人だけです。

では、これはPostgres 12から13に移行するときにテストデータベースをアップグレードする必要があるためだと思いますか?

ほら、 testcontainers.reuse.enable=true設定しました。これは、テストの実行間でデータベースを再利用する可能性がありますか?

PostgreSQL 13へのアップグレードが厳密に必要だとは思いませんか?

AFAIRをアップグレードしたとき、関連する変更を加える必要はなかったので、12でもすべてが正常に機能することを期待します-その間にリグレッションが含まれていない限り、docker /で問題が発生する可能性は低いようです。 testcontainers。

たぶん、構成を12に戻してみてください。

私はこれを再び経験しています:-(

ほら、 testcontainers.reuse.enable=true設定しました。これは、テストの実行間でデータベースを再利用する可能性がありますか?

falseに設定しましたが、問題は解決しませんでした。

environment "TESTCONTAINERS_RYUK_DISABLED", "true"

これで再び修正されました。

@Sanneこの変更を

はい、確かにそうではありません。 これは新機能のようで、これがなくても今のところ満足しています。

Testcontainersに代わって画像をフェッチする責任があるため、新しいコンテナ(postgresql 13など)がないとこれがトリガーされます。

実際には、テストの実行後にコンテナを終了する責任があります。 JVMを強制終了すると、シャットダウンフックは実行されず、コンテナーは実行を継続し、ぶら下がっているコンテナーを作成します。
環境変数は、Ryukを使用できないCIシステム(BitBucket Pipelinesなど)用にありますが、クリーンアップ自体は保証されます。

tl; dr:Ryukを無効にしないでください;)

JVMを強制終了すると、シャットダウンフックは実行されず、コンテナーは実行を継続し、ぶら下がっているコンテナーを作成します。

ええと、TBH、私testcontainers.reuse.enable=trueいつも

そして、結局のところ、ぶら下がっているコンテナは、私のテストが実行されていないよりも悪くはありません。 :-)

しかし、確かに、これが1.15(2日前にリリースされたばかりだと思います)で修正された場合、それは素晴らしいことであり、代わりにアップグレードするだけです。

その@bsideupを説明してくれてありがとう!

このページは役に立ちましたか?
0 / 5 - 0 評価