Docker上的java.net.UnknownHostException

我正在尝试为ZooKeeper创建docker容器并在集群模式下对其进行配置(完整的代码在此处和此处)。

容器基于Alpine Linux(Docker Hub上为alpine:3.2),但是我要描述的问题也出现在官方Java容器(java:7)上。

我使用以下命令来启动集群:

docker run -d -h zk1 --name zk1 dockmob/zookeeper -s zk1,zk2,zk3

# wait some time ...

docker run -d -h zk2 --name zk2 dockmob/zookeeper -s zk1,zk2,zk3

docker run -d -h zk3 --name zk3 dockmob/zookeeper -s zk1,zk2,zk3

(它们在docker hub上可用,您可以尝试)。

如果我等待一段时间开始的第二和第三个容器,那么主机名之前zk2zk3放入/etc/hosts太晚(由码头工人)和Java是无法找到他们:我得到java.net.UnknownHostException在日志zk1两个zk2zk3

我在网上发现我需要禁用JVM DNS缓存才能刷新主机名,因此我在中引入了以下命令Dockerfile以更新java.security设置:

RUN grep '^networkaddress.cache.ttl=' /usr/lib/jvm/java-1.7-openjdk/jre/lib/security/java.security || echo 'networkaddress.cache.ttl=10' >> /usr/lib/jvm/java-1.7-openjdk/jre/lib/security/java.security

它将DNS TTL属性(networkaddress.cache.ttl)设置为10秒。

该变量networkaddress.cache.negative.ttl已设置为其默认值(10)。

行为不会改变。我java.net.UnknownHostException反复得到很多。

可能是什么原因造成的?

回答:

通过切换到Oracle JRE 8并在Dockerfile中使用以下技巧,我设法摆脱了DNS问题:

RUN echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf

我在Docker Hub上创建了一个工作正常的Java 8

docker容器(代码在github上)。

以上是 Docker上的java.net.UnknownHostException 的全部内容, 来源链接: utcz.com/qa/434079.html

回到顶部