Docker容器在Alpine上的UnknownHostException openjdk:8-jdk-alpine

时间:2018-08-09 19:07:49

标签: spring-boot java-8 dockerfile docker-swarm alpine

这与下面的question非常相似,但是前一个问题的解决方案/答案不能解决问题。

就我而言,我没有专门连接到MySQL,但是尝试解析www.google.com只会在容器内导致相同的UnknownHostException。当我仅从JVM运行而不是在MAC上的容器中运行时,解决问题就没有问题了。

相同情况下:   InetAddress ip = InetAddress.getByName(“ www.google.com”);

我尝试了以下建议的解决方法:

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

以及..

RUN echo "hosts: files dns" >> /etc/nsswitch.conf"

似乎都没办法。

除了上述建议之外,还有其他建议吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

事实证明,该解决方案非常简单,并且有两种选择。

对于您的专家来说,这可能很有趣,但至少对下一个家伙来说是个好主意。

所以我发现我可以通过以下方式在群集中的每个节点上指定DNS:

/etc/docker/daemon.json

{
    "dns": ["10.0.0.2", "8.8.8.8", etc.. ]
}

在每个节点(特别是8.8.8.8,针对Google的DNS)上进行设置后,“ google.com”已解析且没有问题。请注意,它是Google专用的DNS,但提供了公共DNS。 Yahoo,Amazon等都已解决。.10.0.0.2地址可以是您要指定的任何其他DNS,并且可以指定多个。

这来自以下帖子:Fix Docker's networking DNS config

但是,如果要通过撰写/堆栈文件指定DNS,则更加容易。

您可以直接在撰写中指定DNS,而不是转到群集中的每个节点并更新daemon.json DNS条目。

version: '3.3'

services:
  my-sample-service:
    image: my-repo/my-sample:1.0.0
    ports: 8081:8080
    networks:
      - my-network
    dns:
      - 10.0.0.1 #this would be whatever your say internal DNS is priority 1
      - 10.0.0.2 #this would be whatever other DNS you'd provide  priority 2
      - 8.8.8.8  #default google address, even though docker specifies this
                 #as a default, it wasn't working until I specifically set it
                 #this would be the last one checked if no resolution happened
                 #on the first two.