"Already connected" 在 docker 容器内运行 jersey 应用程序时出现异常



我正在尝试将一个同时充当REST服务器和客户端的jersey应用程序固定化。当应用程序在docker容器中运行时,其行为似乎有所不同。

我能够执行对非码头化服务的请求(a)。当我尝试在另一个非码头化REST服务器(B)上执行请求时,问题就会出现,在这两种情况下,我都使用JAX-RS客户端API:

// common code - for contacting both A & B services
private static final Client client = ClientBuilder.newClient().register(JacksonFeature.class);  
// inside the method called for each request
WebTarget target = client.target(location);
// for each query param : target = target.queryParam(..);
logger.info("This is logged successfully");
Response resp = target.request(MediaType.APPLICATION_JSON_TYPE).method(method, Entity.json(payloadBean));
logger.info("This is NOT logged for B service");

在这一点上,我得到了一个javax.ws.rs.ProcessingException: Already connected。。。Caused by: java.lang.IllegalStateException: Already connected

我使用一个Dockerfile来设置oracle-java-8和(Tomcat或Jetty),就像我在docker之前在主机上做的一样,一切都很好!

肯定不涉及SSL。

在具有B服务的同一虚拟机上运行我的应用程序会产生相同的行为。

服务A是jersey,而B是django,但这不应该与问题有关,因为它们都是REST服务。

你知道我该如何调试这种情况吗?

我对垃圾邮件感到抱歉,因为事实证明这是一个非常愚蠢的错误:

service A location was an IP address
service B location was an uknown dns name to the container

因此,将--add-host B_fqdn:B_internal_IP传递给docker run解决了

问题

最新更新