我正在研究 docker 容器,现在我正在尝试为 docker 容器设置网络。
Docker 基本上使用一个'docker0'
有网络的网桥,172.17.0.0/16
而这个网络不是同一个主机网络。
我希望 docker 容器和主机容器使用相同的网络。所以现在我正在尝试在没有“桥驱动程序”的情况下构建 docker 容器的网络。
我正在192.168.77.0/24
使用共享器使用网络。我希望主机和 docker 容器使用这个网络。
我在这里引用了 - https://docs.docker.com/v1.7/articles/networking/#how-docker-networks-a-container。
以下是我尝试为容器构建网络的命令。所有命令都以 root 用户身份运行。
# ifconfig eth0 promisc
# docker run -i -t --net=none --name net_test ubuntu_net /bin/bash
# docker inspect -f '{{.State.Pid}}' net_test
# 14673
# pid=14673
# mkdir -p /var/run/netns
# ln -s /proc/$pid/ns/net /var/run/netns/$pid
# brctl addbr my_bridge
# brctl addif my_bridge eth0
# ifconfig my_bridge 192.168.77.250 up
# route del default gw 192.168.77.1
# route add default gw 192.168.77.1
# ifconfig eth0 0.0.0.0 up
# ip link add veth0 type veth peer name veth1
# brctl addif my_bridge veth0
# ip link set veth0 up
# ip link set veth1 netns $pid
# ip netns exec $pid ip link set dev veth1 name eth0
# ip netns exec $pid ip link set eth0 address 12:34:56:78:9a:bc
# ip netns exec $pid ip link set eth0 up
# ip netns exec $pid ip addr add 192.168.77.251/24 broadcast 192.168.77.255 dev eth0
# ip netns exec $pid ip route add default via 192.168.77.1
执行这些命令后,docker 容器可以 ping 到主机,主机可以 ping 到 docker 容器,但容器无法 ping 到外部网络。
下面是执行命令后主机中的路由表。
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.77.1 0.0.0.0 UG 0 0 0 my_bridge
172.17.0.0 * 255.255.0.0 U 0 0 0 docker0
192.168.77.0 * 255.255.255.0 U 0 0 0 my_bridge
下面是执行后docker容器中的路由表
commands.Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.77.1 0.0.0.0 UG 0 0 0 eth0
192.168.77.0 * 255.255.255.0 U 0 0 0 eth0
但 docker 容器也无法 ping 到网关(192.168.77.1)。
我正在使用 ubuntu 14.04 LTS 桌面版。而且我没有设置任何防火墙。
我设置错了吗?谢谢。