Ping工作,但Java代码失败,主机在Docker中无法访问

我被困在docker和Javanetworking问题。 我有几个容器通过docker-compose启动。 有些人需要和别人交谈。 例如一个容器启动RabbitMQ,另一个容器连接到它。 一切工作正常,如果我在与容器名称连接的URL中使用。 但是,我想使用实际的docker主机名称地址(以便我使用的configuration文件可以从外部docker容器以外的机器使用),这不正常。 假设我有两个容器:

  • 的RabbitMQ
  • 的MessageConsumer

如果messageconsumerconfiguration为访问amqp://rabbitmq:5672 ,则连接正常。 但是我的容器正在主机docker.mycompany.com上运行。 如果我使用amqp://docker.mycompany.com:5672作为url,那么使用java.net.NoRouteToHostException: Host is unreachable messageconsumer java代码barfs java.net.NoRouteToHostException: Host is unreachable

但是,如果我在messageconsumer容器中启动一个shell,那么ping docker.mycompany.com可以工作了! 为什么shell和ping查找主机地址,但不是Java? 我的图像基于openjdk:高山。

任何帮助感激!

我刚刚经历了同样的事情。 我没有一个深入的答案,可能不会,但它看起来像使用HOSTnetworking解决了这一点。

我不会说这个理想,但它应该让你去,直到有人想出更好的答案。