微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法在 GoCD 上实例化测试容器

如何解决无法在 GoCD 上实例化测试容器

我正在尝试使用 Testcontainers 和 spring-boot 运行 AWS DynamoDB 以进行测试。它使用 Docker 引擎 19.03.13 及更高版本,Java 15 在我的 MAC 上成功运行和执行测试。不幸的是,它在尝试在 GoCD 上运行时失败。详情如下。

摇篮:

testImplementation 'org.testcontainers:testcontainers:1.15.3'
testImplementation 'org.testcontainers:junit-jupiter:1.15.3

'

Java/Spring:

@Testcontainers
@TestInstance(PER_CLASS)
@SpringBoottest()
public class DynamodbTestContainer {
    protected AmazonDynamoDB amazonDynamoDB;
    protected ApplicationInfoRepo applicationInfoRepo;

    @Container
    static final GenericContainer dynamoDb = new GenericContainer("amazon/dynamodb-local:1.16.0")
            .withCommand("-jar DynamoDBLocal.jar -inMemory -sharedDb")
            .withExposedPorts(8000);

    @BeforeAll
    public void init() {
        var endpointUrl = String.format("http://localhost:%d",dynamoDb.getFirstMappedPort());

amazonDynamoDB = AmazonDynamoDBClientBuilder.standard()              .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration(endpointUrl,"eu-west-2"))
                .build();

错误原因:

com.github.dockerjava.api.exception.DockerClientException: Unsupported protocol scheme found: 'localhost:2376

整个异常堆栈

ApplicationInfoRepoTest > initializationError Failed
    java.util.ServiceConfigurationError: org.testcontainers.dockerclient.DockerClientProviderStrategy: Provider org.testcontainers.dockerclient.EnvironmentAndSystemPropertyClientProviderStrategy Could not be instantiated
        at java.base/java.util.ServiceLoader.fail(ServiceLoader.java:584)
        at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:806)
        at java.base/java.util.ServiceLoader$ProviderImpl.get(ServiceLoader.java:724)
        at java.base/java.util.ServiceLoader$3.next(ServiceLoader.java:1396)
        at java.base/java.lang.Iterable.forEach(Iterable.java:74)
        at org.testcontainers.DockerClientFactory.getorInitializeStrategy(DockerClientFactory.java:134)
        at org.testcontainers.DockerClientFactory.client(DockerClientFactory.java:178)
        at org.testcontainers.LazyDockerClient.getDockerClient(LazyDockerClient.java:14)
        at org.testcontainers.LazyDockerClient.authConfig(LazyDockerClient.java:12)
        at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:310)
        at org.testcontainers.junit.jupiter.TestcontainersExtension$StoreAdapter.start(TestcontainersExtension.java:242)
        at org.testcontainers.junit.jupiter.TestcontainersExtension$StoreAdapter.access$200(TestcontainersExtension.java:229)
        at org.testcontainers.junit.jupiter.TestcontainersExtension.lambda$null$1(TestcontainersExtension.java:59)
        at org.junit.jupiter.engine.execution.ExtensionValuesstore.lambda$getorComputeIfAbsent$4(ExtensionValuesstore.java:86)
        at org.junit.jupiter.engine.execution.ExtensionValuesstore$Memoizingsupplier.computeValue(ExtensionValuesstore.java:223)
        at org.junit.jupiter.engine.execution.ExtensionValuesstore$Memoizingsupplier.get(ExtensionValuesstore.java:211)
        at org.junit.jupiter.engine.execution.ExtensionValuesstore$StoredValue.evaluate(ExtensionValuesstore.java:191)
        at org.junit.jupiter.engine.execution.ExtensionValuesstore$StoredValue.access$100(ExtensionValuesstore.java:171)
        at org.junit.jupiter.engine.execution.ExtensionValuesstore.getorComputeIfAbsent(ExtensionValuesstore.java:89)
        at org.junit.jupiter.engine.execution.NamespaceAwareStore.getorComputeIfAbsent(NamespaceAwareStore.java:53)
        at org.testcontainers.junit.jupiter.TestcontainersExtension.lambda$beforeAll$2(TestcontainersExtension.java:59)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
        at org.testcontainers.junit.jupiter.TestcontainersExtension.beforeAll(TestcontainersExtension.java:59)
        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeBeforeAllCallbacks$8(ClassBasedTestDescriptor.java:368)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeBeforeAllCallbacks(ClassBasedTestDescriptor.java:368)
        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:192)
        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:78)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:136)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:143)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:129)
        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:127)
        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:126)
        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:84)
        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248)
        at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211)
        at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199)
        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassprocessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassprocessor.java:99)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassprocessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassprocessor.java:79)
        at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassprocessor.stop(JUnitPlatformTestClassprocessor.java:75)
        at org.gradle.api.internal.tasks.testing.SuiteTestClassprocessor.stop(SuiteTestClassprocessor.java:61)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        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.$Proxy5.stop(UnkNown Source)
        at org.gradle.api.internal.tasks.testing.worker.TestWorker.stop(TestWorker.java:133)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:564)
        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.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
        at java.base/java.lang.Thread.run(Thread.java:832)

        Caused by:
        com.github.dockerjava.api.exception.DockerClientException: Unsupported protocol scheme found: 'localhost:2376
            at org.testcontainers.shaded.com.github.dockerjava.core.DefaultDockerClientConfig.checkDockerHostScheme(DefaultDockerClientConfig.java:107)
            at org.testcontainers.shaded.com.github.dockerjava.core.DefaultDockerClientConfig.<init>(DefaultDockerClientConfig.java:90)
            at org.testcontainers.shaded.com.github.dockerjava.core.DefaultDockerClientConfig$Builder.build(DefaultDockerClientConfig.java:438)
            at org.testcontainers.dockerclient.EnvironmentAndSystemPropertyClientProviderStrategy.<init>(EnvironmentAndSystemPropertyClientProviderStrategy.java:18)
            at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:64)
            at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
            at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
            at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
            at java.base/java.util.ServiceLoader$ProviderImpl.newInstance(ServiceLoader.java:782)
            ... 81 more

解决方法

GoCD 环境配置不正确,因为 DOCKER_HOST 设置为“localhost:2376”。更改 DOCKER_HOST=tcp://localhost:2376 后,它正常工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。