无法从docker容器访问本地网络IP

时间:2016-12-15 16:19:19

标签: macos ubuntu networking docker

在其上运行macOS和docker ubuntu,我无法ping我本地网络的IP地址。以下是我的docker容器的网络配置。我可以ping我的主机IP地址,但我无法访问本地网络上的其他IP地址。

root# ping 172.17.101.192
PING 172.17.101.192 (172.17.101.192) 56(84) bytes of data.
From 172.17.0.3 icmp_seq=1 Destination Host Unreachable
From 172.17.0.3 icmp_seq=2 Destination Host Unreachable

root# ifconfig         
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:03
          inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:3/64 Scope:Link

是否有任何网络配置可以帮助我执行此操作?

我已经尝试net=host,但它没有帮助它。

4 个答案:

答案 0 :(得分:9)

我正在使用docker for mac,问题是docker内部网络与我的本地网络寻址冲突。 要解决此问题,我需要转到dokcer菜单中的Preferences。 在首选项菜单Daemon>Advanced Menu中,我可以提供其他双击。

{
    "bip" : "12.12.0.1/24"
}

单击“应用”并重新启动。下次docker将以内部网络12.12.0.1/24开始。

答案 1 :(得分:2)

我尝试了以下内容,它确实有效:

mac-os $> ifconfig
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 78:31:c1:bd:4b:84 
    inet6 fe80::1425:a90d:9c00:ef53%en0 prefixlen 64 secured scopeid 0x4 
    inet 10.191.41.1 netmask 0xfffff800 broadcast 10.191.47.255
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active

所以我的ip是 10.191.41.1 。然后我做:

mac-os $> docker run -ti --rm ubuntu bash -c "apt-get update && apt-get install -y inetutils-ping && ping 10.191.41.1"

安装&#34; ping&#34;命令,并尝试ping我的主机。我得到了正确的答案:

[...]
PING 10.191.41.1 (10.191.41.1): 56 data bytes
64 bytes from 10.191.41.1: icmp_seq=0 ttl=37 time=0.303 ms
64 bytes from 10.191.41.1: icmp_seq=1 ttl=37 time=0.536 ms
[...]

答案 2 :(得分:2)

我猜你正在使用泊坞机。

您应该查看docker for mac,因为它有一些networking improvements可能会让您的工作正常。这就是我正在使用的,我可以通过docker到达我内部网络上的其他主机。

答案 3 :(得分:2)

我认为docker内部网络可能与您的本地网络寻址冲突。

尝试运行Docker将默认内部网络更改为不冲突的内容,如172.31.0.0/24。添加到您的Docker启动选项--bip 172.31.0.1/24,可能位于/etc/default/docker

# Use DOCKER_OPTS to modify the daemon startup options.
DOCKER_OPTS="--bip 172.31.0.1/24"

更新:虽然在Linux中也是如此,但Mac实现方式不同,请参阅文档here,因此,这取决于您使用的是Docker for Mac还是Linux。

只是为了测试,尝试将笔记本电脑连接到不同的网络,192.168.0.0/16范围内的任何一个都足够了。