我正在尝试对一个 jersey 应用程序进行 dockerize,该应用程序既充当 REST 服务器又充当客户端。该应用程序在 Docker 容器内运行时的行为似乎有所不同。
我能够向非 Docker 化服务 (A) 执行请求。当我尝试在另一个非 Docker 化的 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:已经连接
... 引起:java.lang.IllegalStateException:已经连接
我使用一个 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
解决了问题
关于jakarta-ee - "Already connected"在 docker 容器内运行 jersey 应用程序时出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36622484/