java.net.InetAddress java类不能parsingAlpine Docker容器上的IP

当我在Alpine Linux上运行Java JDK 8的容器Docker中运行以下代码时

import java.io.*; import java.util.*; import java.net.*; public class SomaDBTest { public static void main(String... args) throws Throwable { InetAddress ip = InetAddress.getByName("mysql"); System.out.println("Begin - mysql IP Addr = " + ip.getHostAddress()); . . . } } 

我得到的错误:

  Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8 Exception in thread "main" java.net.UnknownHostException: mysql: unknown error at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:928) at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1323) at java.net.InetAddress.getAllByName0(InetAddress.java:1276) at java.net.InetAddress.getAllByName(InetAddress.java:1192) at java.net.InetAddress.getAllByName(InetAddress.java:1126) at java.net.InetAddress.getByName(InetAddress.java:1076) at SomaDBTest.main(SomaDBTest.java:52) 

有任何想法吗 ?

顺便说一句,我可以成功运行ping mysqlnslookup命令。

 # ping mysql PING mysql (172.17.0.2): 56 data bytes 64 bytes from 172.17.0.2: seq=0 ttl=64 time=0.185 ms 64 bytes from 172.17.0.2: seq=1 ttl=64 time=0.283 ms 64 bytes from 172.17.0.2: seq=2 ttl=64 time=0.424 ms # nslookup mysql Server: (null) Address 1: ::1 localhost Address 2: 127.0.0.1 localhost Name: mysql Address 1: 172.17.0.2 mysql 

我的Dockerfile非常简单:

 FROM frolvlad/alpine-oraclejdk8 ADD bin / WORKDIR / 

SomaDBTest.javaSomaDBTest.class文件位于bin目录中。

要运行容器,请执行以下操作:

 docker build -t testInetAddress . docker run -i -t testInetAddress java SomaDBTest 

你可以把下面的命令放在你的Dockerfile解决这个问题

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