我正在研究docker容器,现在我正在尝试为docker容器设置网络。
Docker基本上使用具有'docker0'
网络的172.17.0.0/16
网桥,此网络不是同一主机网络。
我希望docker容器和主机容器使用相同的网络。 所以现在我试图在没有“桥驱动器”的情况下组成docker container的网络。
我使用sharer使用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桌面版。 我没有设置任何防火墙。
我说错了吗?感谢。