我对码头和Java网络问题感到难过。我有几个容器通过docker-compose启动。有些人需要与他人交谈。例如,一个容器启动RabbitMQ,另一个容器连接到它。如果我在使用容器名称连接的URL中使用,一切正常。但是,我想使用实际的docker主机名地址(这样我使用的配置文件可以在docker容器之外的外部机器上使用),这很奇怪。 所以我要说我有两个容器:
如果messageconsumer配置为访问amqp://rabbitmq:5672
,则连接正常。但是我的容器在主机docker.mycompany.com
上正在运行。如果我使用amqp://docker.mycompany.com:5672
作为网址,我的messageconsumer java代码barfs java.net.NoRouteToHostException: Host is unreachable
。
但是,如果我在messageconsumer容器中启动shell,ping docker.mycompany.com
可以正常工作!为什么shell和ping找到主机地址,而不是Java?我的图片基于openjdk:alpine。
任何帮助表示赞赏!
答案 0 :(得分:0)
我刚刚经历了同样的事情。我没有深入的答案,可能不会,但看起来好像使用HOST网络解决了这个问题。
我不会声称这个理想,但它应该让你去,直到有人得到更好的答案。