首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker :8 UnknownHostException

Docker :8 UnknownHostException
EN

Stack Overflow用户
提问于 2018-01-10 10:06:57
回答 1查看 5K关注 0票数 2

我有自定义的java应用程序,它使用org.​apache.​commons.​io.FileUtils.copyFile(File srcFile, File destFile)从web下载文件。当它直接运行时,它工作得很好,但是当我从一个码头容器运行它时,我会得到以下异常:

代码语言:javascript
复制
Exception in thread "main" java.net.UnknownHostException: <MY HOST>
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.net.NetworkClient.doConnect(NetworkClient.java:175)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
at sun.net.www.http.HttpClient.New(HttpClient.java:339)
at sun.net.www.http.HttpClient.New(HttpClient.java:357)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1564)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1492)
at org.apache.commons.io.FileUtils.copyURLToFile(FileUtils.java:1506)

我尝试在容器上公开httphttps端口,使用EXPOSE 8080EXPOSE 8443和运行-P选项。接下来是使用--hostname=127.0.0.1选项运行容器。然后我发现了Dockerfile的一个黑客:RUN echo 'hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4' >> /etc/nsswitch.conf。什么都帮不上忙。你对如何解决这个问题有什么建议吗?

Docker版本17.10.0-ce, build f4ffd25,Dockerfile基图像:openjdk:8

码头图像/etc/hosts包含:

代码语言:javascript
复制
127.0.0.1       localhost
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.2      afa4800849e0
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-10 11:42:18

问题在于容器内部使用的DNS服务器。它要么与主机DNS不匹配,要么不保存所请求的DNS名称。

您可以通过在容器启动期间传递著名的DNS服务器来解决这个问题。

使用

代码语言:javascript
复制
--dns=8.8.8.8

若要引用Google,请执行以下操作。

还请参阅码头文件安装程序。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48184867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档