CoreOS docker主机不能通过IP访问容器; 局域网上的其他电脑可以

我们有一个问题,我们的服务器托pipe我们的容器无法访问他们的IP,而networking上的其他计算机可以。 我们已经为我们的局域网设置了以下设置:

  • 通过两条电缆(运行CoreOS 1068.10.0和Docker 1.10.3)连接到路由器的服务器
  • 连接服务器和客户端的路由器
  • 许多客户端计算机都直接连接到路由器或通过连接到路由器的交换机

所以我们的networking看起来像这样,超级简单:

|---------| |---------| |---------| | Docker |-----------| Router |-----------| Other computers/ | Host |-----------| | | NAS/etc | |---------| |---------| |---------| 

为了将我们的容器暴露给我们的networking,我们遵循这个答案: https : //stackoverflow.com/a/35799206

即我们使用的命令是这些:

  docker network create \ --subnet 192.168.0.0/16 \ --aux-address "DefaultGatewayIPv4=192.168.0.1" \ --gateway=192.168.1.1 \ -o com.docker.network.bridge.name=br-internal_lan internal_lan sudo brctl addif br-internal_lan eno1 sudo ip a del 192.168.1.1/16 dev br-internal_lan 

到现在为止还挺好。 我们的服务器在eno3上有IP 192.168.0.3,这是我们想要的。 eno1通过单独的电缆连接到路由器,并用于桥接。 该桥获得IP 192.168.0.83。 如果我们然后开始我们的容器:

 docker run --net=internal_lan -d --ip 192.168.1.0 serverimage:latest 

我们得到以下场景:

  • 工作:从客户端ping容器(反之亦然)
  • 作品:从客户ping主机(反之亦然)
  • 作品:从容器,主机,客户端桥接IP
  • 作品:从容器ping主机
  • 作品:运行docker exec container01 /bin/bash来访问容器
  • 不工作:从主机ping容器 ,数据包丢失是100%

这些是我们的服务器的一些示例设置:

使用ifconfig

 br-internal_lan: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.83 netmask 255.255.0.0 broadcast 192.168.255.255 inet6 fe80::42:8cff:fe30:3b4a prefixlen 64 scopeid 0x20<link> ether 02:42:8c:30:3b:4a txqueuelen 0 (Ethernet) RX packets 430214 bytes 62591783 (59.6 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 4244 bytes 546612 (533.8 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet6 fe80::225:90ff:fe5d:6b80 prefixlen 64 scopeid 0x20<link> ether 00:25:90:5d:6b:80 txqueuelen 1000 (Ethernet) RX packets 829691 bytes 296523943 (282.7 MiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 78684 bytes 87560787 (83.5 MiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device memory 0xdf400000-df47ffff eno3: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.0.3 netmask 255.255.0.0 broadcast 192.168.255.255 inet6 fe80::225:90ff:fe5d:6b82 prefixlen 64 scopeid 0x20<link> ether 00:25:90:5d:6b:82 txqueuelen 1000 (Ethernet) RX packets 1744808 bytes 1583970565 (1.4 GiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 1019186 bytes 1085667196 (1.0 GiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device memory 0xdf200000-df27ffff <other interfaces omitted> 

路线

 default router.asus.com 0.0.0.0 UG 1024 0 0 eno3 default router.asus.com 0.0.0.0 UG 1024 0 0 br-internal_lan 172.17.0.0 * 255.255.0.0 U 0 0 0 docker0 192.168.0.0 * 255.255.0.0 U 0 0 0 eno3 192.168.0.0 * 255.255.0.0 U 0 0 0 br-internal_lan router.asus.com * 255.255.255.255 UH 1024 0 0 eno3 router.asus.com * 255.255.255.255 UH 1024 0 0 br-internal_lan 

我们尝试将/proc/sys/net/ipv4/[eno1,eno3,br-internal_lan]/rp_filter为2,但是它没有改变任何东西(不知道是否应该)。 /proc/sys/net/ipv4/ip_forward设置为1。

我们的设置有什么问题? 我们如何通过IP访问我们的容器? 任何帮助表示赞赏,如果我需要提供额外的信息,请让我们知道。

(请注意,我们目前正在运行Docker 1.10.3(这是使用CoreOS稳定版时最新的Docker版本),所以我们不能selectmacvlan。)