我们有一个问题,我们的服务器托pipe我们的容器无法访问他们的IP,而networking上的其他计算机可以。 我们已经为我们的局域网设置了以下设置:
所以我们的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
我们得到以下场景:
docker exec container01 /bin/bash来访问容器 这些是我们的服务器的一些示例设置:
使用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。)