# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jdk6-tomcat6-sshd-new latest ee3e2b60058d 4 days ago 970.3 MB
创建一个无网络环境的容器sshd-test,该容器创建好后默认只会有一个lo回环网口。
# docker run -itd --name sshd-test -h testssh --net=none jdk6-tomcat6-sshd-new
3ceb61136590f1362be67f1911591d0b3ca41657c6b33f45982b0df4489f5f73
获取该容器的PID为13157,后面会用到
# docker inspect -f "{{.State.Pid}}" 3ceb61136590f1362be67f1911591d0b3ca41657c6
13157
添加一对虚拟网卡,分别为veth_3ceb6和eth0
# ip link add veth_3ceb6 type veth peer name eth0
将虚拟网卡veth_3ceb6桥接到br0上
# brctl addif br0 veth_3ceb6
激活veth_3ceb6网卡,并容器内部的网卡eth0绑定到该容器的网络命名空间内
# ip link set veth_3ceb6 up
# ip link set eth0 netns 13157
将该容器的网络命名空间暴露出来
# mkdir -p /var/run/netns
# ln -s /proc/13157/ns/net /var/run/netns/13157
此时查看该容器就会发现已经多了一块网卡eth0@if850
# docker exec sshd-test ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
849: eth0@if850: <BROADCAST,MULTICAST,M-DOWN> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 46:0a:e8:5b:ac:c0 brd ff:ff:ff:ff:ff:ff
查看网络状况,新加的网卡名称为eth0
# docker exec sshd-test ifconfig -a
eth0 Link encap:Ethernet HWaddr 46:0A:E8:5B:AC:C0
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
通过netns激活该容器内部的eth0网卡,并添加网络信息
# ip netns exec 13157 ip link set dev eth0 name eth0
# ip netns exec 13157 ip link set eth0 up
# ip netns exec 13157 ip addr add 10.0.0.2/23 dev eth0
# ip netns exec 13157 ip route add default via 10.0.0.254
完成最后的网络信息的添加后,就可以实现给该容器附加一个独立vlan中的网络。