Docker上的java.net.UnknownHostException
我正在尝试为ZooKeeper创建docker容器并在集群模式下配置它们(完整代码是here和here). 容器基于Alpine Linux(高山:Docker Hub上的3.2),但我要描述的问题也发生在官方Java容器(java:7)上. 我使用以下命令启动集群:
(它们可以在码头集线器上使用,您可以试用它们). 如果我在启动第二个和第三个容器之前等待一段时间,那么主机名zk2和zk3放在/ etc / hosts中太晚了(通过docker),Java无法找到它们:我得到java.net.UnknownHostException in zk1和zk3的zk1日志. 我在网上发现我需要禁用JVM DNS缓存才能刷新主机名,所以我在Dockerfile中引入了以下命令来更新java.security设置:
它将DNS TTL属性(networkaddress.cache.ttl)设置为10秒. 变量networkaddress.cache.negative.ttl已设置为其默认值(10). 行为不会改变.我反复得到很多java.net.UnknownHostException. 可能是问题的原因是什么? 最佳答案
在我的情况下(java应用程序在docker中运行时失败了java.net.UnknownHostException),原因是我使用了–network = none docker flag(通过dhcp和pipework获取ip / hostname).在这种情况下,docker不会自动添加到/ etc / hosts条目中
127.0.0.1 15e326aecf84 而getCanonicalHostName()Java函数抛出了这个异常. 可能的解决方案: >通过docker run parameter –hosname = your-hostname.com将主机名条目添加到/ etc / hosts文件 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |