【问题标题】:Troubleshoot docker connectivity to external network解决 docker 与外部网络的连接问题
【发布时间】:2015-04-09 08:42:37
【问题描述】:

这是一个 DNS 服务器问题——默认服务器 8.8.8.8(在 Ubuntu 中的 Docker 中预先配置)可以通过 nslookup 被 ping,但无法访问。

我无法从本地安装的容器连接到互联网。

我的系统

ifconfig 看起来不错

$ docker run -ti twelly/ifconfigme ifconfig
eth0      Link encap:Ethernet  HWaddr f2:bd:a6:53:6f:5f  
          inet addr:172.17.0.35  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::f0bd:a6ff:fe53:6f5f/64 Scope:Link
          UP BROADCAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:2 overruns:0 frame:0
          TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:90 (90.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

我可以ping 8.8.8.8

$ docker run -ti twelly/ifconfigme ping -c 3 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=56 time=33.6 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=56 time=33.6 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=56 time=33.5 ms

--- 8.8.8.8 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 33.525/33.597/33.650/0.218 ms

ping 在超时后退出并失败

$ time docker run -ti twelly/ifconfigme ping -c 3 google.com
ping: unknown host google.com

real    0m40.267s
user    0m0.014s
sys 0m0.012s

我与debian:latest 有相同的结果,但我无法测试ifconfig,因为它没有安装在那里。

新虚拟机

相同的设置适用于新的 Ubuntu Utopic 14.10 虚拟机。

Vagrantfile:

Vagrant.configure(2) do |config|
  config.vm.box = "https://cloud-images.ubuntu.com/vagrant/utopic/current/utopic-server-cloudimg-amd64-vagrant-disk1.box"

  config.vm.provision "shell", inline: "apt-get update && apt-get upgrade -y"
  config.vm.provision "shell", inline: "apt-get install -y docker.io && adduser vagrant docker"
end

命令

$ vagrant up && vagrant ssh -c "docker run -ti twelly/ifconfigme ping -c 3 google.com"

问题

我可能做错了什么?如何解决这个问题?

【问题讨论】:

  • 您能否发布一份用于创建 ifconfigme 映像的 Dockerfile 的副本?当您尝试 ping google 的 dns ip 地址 8.8.8.8 时会发生什么?
  • @booyaa:它并不特定于这个特定的图像,同样的失败 debian:latest 有一个 public Dockerfile (虽然不是很有帮助)。我在示例中使用了这个特定的图像,因为它默认有ifconfig
  • 可能是一般网络故障,也可能只是 DNS 故障。那么你可以从容器 ping 8.8.8.8 吗?
  • @VitalyIsaev:宾果游戏,那个有效。
  • @VitalyIsaev:但docker run --dns=8.8.8.8 也无济于事。如何解决?

标签: ubuntu networking docker


【解决方案1】:

您必须指定您不希望连接由容器管理。在你的运行命令中使用--net=host

【讨论】:

  • 使用--net=host有什么缺点吗?
  • 我不确定。有几个人和我们面临同样的问题,请参阅link。但是,如果您使用它,它看起来不会缩小您的连接,see that link
  • 如文档所说:“宿主网络在hosts网络栈上增加了一个容器,你会发现容器内的网络配置和宿主机是一样的。”它只会与容器共享相同的网络配置。不知道是不是安全问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
  • 2017-05-23
  • 2020-10-15
  • 2018-08-17
  • 1970-01-01
相关资源
最近更新 更多