java.net.InetAddress Java类无法解析Alpine Docker容器上的IP [英] java.net.InetAddress java class doesn't resolve IP on Alpine Docker container

查看:610
本文介绍了java.net.InetAddress Java类无法解析Alpine Docker容器上的IP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我在容器 Docker 中的 Alpine Linux

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 mysql nslookup 命令。

By the way, I can run the ping mysql and nslookup command successfully.

# 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非常简单:

My Dockerfile is very simple:

FROM frolvlad/alpine-oraclejdk8
ADD bin /
WORKDIR /

文件 SomaDBTest.java SomaDBTest.class 位于 bin 目录。

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

To run the container you do :

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


推荐答案

您可以将命令波纹管放在 Dockerfile 上以解决此问题

You can put the command bellow on your Dockerfile to solve this problem

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

这篇关于java.net.InetAddress Java类无法解析Alpine Docker容器上的IP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆