环境
Ubuntu 14.04.4 LTS
安装 brctl 网桥
apt-get install bridge-utils
以–net=’none’的方式启动一个container
docker run -i -t --name=net --hostname=net --net='none' ubuntu:ssh /bin/bash
root@net:/# ifconfig
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)
使用’none’模式,container中没有获取到IP,甚至连网卡都没有
首先找到ID 通过ID找到进程Pid
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eaadcd10ca44 ubuntu:ssh "/bin/bash" 4 minutes ago Up 4 minutes net
docker inspect -f "{{.State.Pid}}" eaadcd10ca44
10711
以容器的ID创建一个网卡
ip link add veth_eaadc type veth peer name eaadcd10ca44
把网卡绑定到 docker0
brctl addif docker0 veth_eaadc
启动网卡
ip link set veth_eaadc up
ip link set eaadcd10ca44 netns 10711
#容器内部的已经有网卡了,只是没IP
root@net:/# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default
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
28: eaadcd10ca44@if29: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN group default qlen 1000
link/ether a2:25:7d:d1:2b:e5 brd ff:ff:ff:ff:ff:ff
配置容器网卡
mkdir -p /var/run/netns/
ln -s /proc/10711/ns/net /var/run/netns/10711
ip netns exec 10711 ip link set dev eaadcd10ca44 name eth0
ip netns exec 10711 ip link set eth0 up
ip netns exec 10711 ip addr add 172.17.111.3/16 dev eth0
ip netns exec 10711 ip route add default via 172.17.42.1
172.17.42.1 为docker0的IP
配置完成。
容器重启需要重新配置,因为PID变了