Псевдоним сети TestContainers, не разрешаемый программой Java - PullRequest
0 голосов
/ 14 марта 2020

У меня есть два контейнера, созданные TestContainers. Один из них - контейнер S3 LocalStack, а другой - пользовательский (из GenericContainer). Они используют одну и ту же сеть (которую я добавляю к ним при создании). У меня есть сетевой псевдоним на контейнере LocalStack. Когда я запускаю второй пользовательский контейнер, я могу запустить container.execInContainer(), чтобы использовать wget (а также псевдоним и порт) для подключения к контейнеру LocalStack. Это работает нормально, и я получаю ожидаемый ответ S3 XML (это можно увидеть в журналах ниже). Итак, первый контейнер доступен из второго контейнера.

В моем собственном контейнере у меня есть приложение Java, которое использует Netty (через Vertx) для выполнения HTTP-запроса к моему контейнеру S3. Это терпит неудачу, хотя с UnknownHostException. Таким образом, кажется, я могу подключиться ко второму контейнеру через wget в командной строке, но не из приложения Java. Я попытался получить сетевой IP-адрес контейнера LocalStack и использовать его вместо сетевого псевдонима, но это тоже не работает. Я также попытался добавить IP-адрес псевдонима и контейнера LocalStack в файл hosts пользовательского контейнера через container.withExtraHost в пользовательском контейнере, но это тоже не работает. Это приложение прекрасно работает при подключении к реальной конечной точке S3 (когда не используются тестовые тестовые контейнеры).

Трассировка стека от Netty (в трассировке стека нет ссылок на клиента Vertx):

[DEBUG] e.u.library.iiif.fester.utils.ContainerUtils:59 | =====================================================>
[DEBUG] e.u.library.iiif.fester.utils.ContainerUtils:61 | Trying to access http://s3.localstack:4572
[DEBUG] e.u.library.iiif.fester.utils.ContainerUtils:65 | <ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01"><Owner><ID>bcaf1ffd86f41161ca5fb16fd081034f</ID><DisplayName>webfile</DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
[DEBUG] e.u.library.iiif.fester.utils.ContainerUtils:69 | <=====================================================
waiting... http://localhost:34784/bar/manifest
[INFO] FesterFT: | STDOUT: [ERROR] e.u.l.iiif.fester.handlers.GetManifestHandler:88 | failed to resolve 'http://s3.localstack:4572' after 2 queries 
[INFO] FesterFT: | STDOUT: java.net.UnknownHostException: failed to resolve 'http://s3.localstack:4572' after 2 queries 
[INFO] FesterFT: | STDOUT:  at io.netty.resolver.dns.DnsResolveContext.finishResolve(DnsResolveContext.java:925)
[INFO] FesterFT: | STDOUT:  at io.netty.resolver.dns.DnsResolveContext.tryToFinishResolve(DnsResolveContext.java:884)
[INFO] FesterFT: | STDOUT:  at io.netty.resolver.dns.DnsResolveContext.query(DnsResolveContext.java:356)
[INFO] FesterFT: | STDOUT:  at io.netty.resolver.dns.DnsResolveContext.onResponse(DnsResolveContext.java:543)
[INFO] FesterFT: | STDOUT:  at io.netty.resolver.dns.DnsResolveContext.access$400(DnsResolveContext.java:64)
[INFO] FesterFT: | STDOUT:  at io.netty.resolver.dns.DnsResolveContext$2.operationComplete(DnsResolveContext.java:400)
[INFO] FesterFT: | STDOUT:  at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577)
[INFO] FesterFT: | STDOUT:  at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:570)
[INFO] FesterFT: | STDOUT:  at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:549)
[INFO] FesterFT: | STDOUT:  at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490)
[INFO] FesterFT: | STDOUT:  at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615)
[INFO] FesterFT: | STDOUT:  at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604)
[INFO] FesterFT: | STDOUT:  at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104)
[INFO] FesterFT: | STDOUT:  at io.netty.resolver.dns.DnsQueryContext.setSuccess(DnsQueryContext.java:204)
[INFO] FesterFT: | STDOUT:  at io.netty.resolver.dns.DnsQueryContext.finish(DnsQueryContext.java:196)
[INFO] FesterFT: | STDOUT:  at io.netty.resolver.dns.DnsNameResolver$DnsResponseHandler.channelRead(DnsNameResolver.java:1320)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
[INFO] FesterFT: | STDOUT:  at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:352)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1422)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:374)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:360)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:931)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:93)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:700)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:635)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:552)
[INFO] FesterFT: | STDOUT:  at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:514)
[INFO] FesterFT: | STDOUT:  at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1044)
[INFO] FesterFT: | STDOUT:  at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
[INFO] FesterFT: | STDOUT:  at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
[INFO] FesterFT: | STDOUT:  at java.base/java.lang.Thread.run(Thread.java:834)

У кого-нибудь есть идеи, что происходит не так?

1 Ответ

0 голосов
/ 14 марта 2020

Хорошо, я сделал что-то глупое, но я оставлю это, наверное. Теперь, когда я использую конечную точку S3, у которой есть порт, отличный от веб-порта по умолчанию, я считаю, что мне просто нужно иначе инициализировать веб-хост по умолчанию HTTP-клиента. Возможно, намекнуло на то, что то, что пытается разрешить, не является строго именем хоста (оно имеет «http: //» и номер порта вместе с ним). В любом случае, нет ничего лучше, чем задать вопрос, чтобы помочь вам найти решение самостоятельно. Я не могу принять это в течение двух дней, но это все равно даст мне время, чтобы подтвердить это.

...