"已经连接"在docker container

时间:2016-04-14 12:02:21

标签: java-ee docker jersey-2.0 jersey-client

我正在尝试对作为REST服务器和客户端的泽西应用程序进行dockerize。在docker容器内运行时,应用程序的行为似乎有所不同。

我能够对非dockerized服务(A)执行请求。当我尝试在另一个非dockerized 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服务的同一VM上运行我的应用程序会产生相同的行为。

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

关于如何调试这种情况的任何想法?

1 个答案:

答案 0 :(得分:2)

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

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解决了问题