2

我正在研究 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 桌面版。而且我没有设置任何防火墙。

我设置错了吗?谢谢。

4

0 回答 0