首页 文章

Docker容器无法解析网站名称,但可以ping他们的ip

提问于
浏览
2

当我试着

apt-get update

在基于ubuntu的容器中 .

我收到这样的错误 .

Temporary failure resolving 'archive.ubuntu.com'.

当我试图ping“archive.ubuntu.com”的ip时,没关系 .

但当我试图ping“archive.ubuntu.com”时,它向我展示了

uknown host archive.ubuntu.com

所以我尝试了几种可以在互联网上找到的方法,就像这样 .

echo "91.189.92.201 archive.ubuntu.com" >> /etc/hosts

然后我可以ping'archive.ubuntu.com'

但其他网站仍无法按名称链接 .

我尝试在/ etc / default / docker中添加一行,就像这样

DOCKER_OPTS="--dns 8.8.8.8 --dns 114.114.114.114 --dns 8.8.4.4"

然后我重启docker服务,并附加到容器,看到这一点

cat /etc/resolv.conf

和结果

root@d9d5bbdb11de:/# cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN

nameserver 8.8.8.8 
nameserver 8.8.4.4

我不知道这是否适用 .

ps,我可以ping 8.8.8.8,114.114.114.114,8.8.4.4 .

出于某些原因,我试图弄清楚防火墙问题在哪里,所以我在容器中使用了iptables .

iptables-save.

这是我在iptables中保存容器时的结果 .

wjy@wjy-VirtualBox:~$ sudo iptables-save [sudo] wjy 的密码: 

# Generated by iptables-save v1.6.0 on Sat Mar  4 16:06:53 2017

*nat :PREROUTING ACCEPT [28:1772] :INPUT ACCEPT [0:0] :OUTPUT ACCEPT [253:15867] :POSTROUTING ACCEPT [253:15867] :DOCKER - [0:0]

-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER

-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER

-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE

-A DOCKER -i docker0 -j RETURN COMMIT

# Completed on Sat Mar  4 16:06:53 2017

# Generated by iptables-save v1.6.0 on Sat Mar  4 16:06:53 2017

*filter :INPUT ACCEPT [1211:567114] :FORWARD DROP [0:0] :OUTPUT ACCEPT [1254:152567] :DOCKER - [0:0] :DOCKER-ISOLATION - [0:0]

-A FORWARD -j DOCKER-ISOLATION

-A FORWARD -o docker0 -j DOCKER

-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

-A FORWARD -i docker0 ! -o docker0 -j ACCEPT

-A FORWARD -i docker0 -o docker0 -j ACCEPT

-A DOCKER-ISOLATION -j RETURN COMMIT

# Completed on Sat Mar  4 16:06:53 2017

它可能是主机,DNS或iptable问题 . 但我不知道如何使我的所有容器解析网站名称并链接到互联网 . 如果您遇到类似情况或知道如何解决,请帮我一个忙 . 非常感谢 .

1 回答

  • 0

    我确实在主机上停留了代理的错误 . 我的意思是,如果您的docker主机已设置代理设置 . 我将解释我是如何解决它的,如果是你的情况或对他人有用,可能对你有用 .

    有3个位置配置代理设置:

    • 在操作系统级别:

    它取决于O.S.,通常你可以把 http_proxy=http://yourproxy:port/ 放在 /etc/environment

    • 在Docker引擎级别:

    您必须在 /etc/systemd/system/docker.service.d/http-proxy.conf 创建包含以下内容的文件夹和文件:

    [Service]
    Environment="HTTP_PROXY=http://yourproxy:port/"
    
    • 和最后一个(不要忘记在最后两个步骤后重新启动),你必须把它作为环境变量 Dockerfile 来构建它!

    Dockerfile示例:

    FROM ubuntu:latest
    ENV HTTP_PROXY http://yourproxy:port/
    RUN apt-get update
    

    也许这就像我的问题一样 .

    我建议不要触摸iptables,不要触摸DNS . 重新创建容器docker会自动执行所需的作业 . 如果你需要触摸那里,出了点问题 . 只有确保在docker主机上完全可以使用Internet访问 .

    祝好运 .

相关问题