Docker 手動配置容器網絡
docker容器的網絡是net命名空間與虛擬設備的結合,容器在啟動時會創建一對虛擬接口veth pair,這一對接口分別放到本地和容器中,在本地的veth會被分配類似vethxxxx的名稱并被橋接到指定網橋的上(默認為docker0),可以通過brctl show命令查看網橋上掛載的接口,在容器中的veth會從網橋獲取一個未使用地址,該veth的名稱會被更改為eth0并配置默認路由到vethxxxx,docker允許在啟動容器的時候通過--net參數指定不同的網絡類型。
--net=bridge:默認值,橋接到默認的網橋。
--net=host:不將容器網絡放到隔離的namespace,此時docker不會容器化容器內的網絡,這樣創建出來的容器使用的是本地的網絡,擁有完全的本地主機接口訪問權限。
--net=contianer:name_or_id:使用一個已經存在的容器的網絡棧,共享已存在容器的ip地址和端口等網絡資源。
--net=none:將新容器放到隔離的網絡棧中,不進行網絡配置,我們為容器配置網絡需要指定該項。
我的環境 :操作系統---centos7,Docker版本---1.7,基礎鏡像---centos-6-x86_64.tar.gz
1. 啟動容器
[black@test ~]$ docker run -it --rm --name=mynetwork --net=none centos:latest /bin/bash
在容器中查看網絡設置,可以發現只有本地環回接口lo
[root@99abaecd79ab /]# 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)
2. 為容器創建net命名空間
[black@test ~]$ PID=$(docker inspect -f '{{.State.Pid}}' mynetwork) [black@test ~]$ sudo mkdir -p /var/run/netns [black@test ~]$ sudo ln -s /proc/$PID/ns/net /var/run/netns/$PID
3. 創建一對veth接口A和B,綁定A到自定義的網橋br0
[black@test ~]$ sudo ip link add A type veth peer name B [black@test ~]$ sudo brctl addif br0 A [black@test ~]$ sudo ip link set A up
4. 將B放入容器中,命名為eth0,啟動并配置ip與默認網關
[black@test ~]$ sudo ip link set B netns $PID [black@test ~]$ sudo ip netns exec $PID ip link set dev B name eth0 [black@test ~]$ sudo ip netns exec $PID ip link set eth0 up [black@test ~]$ sudo ip netns exec $PID ip addr add 10.10.10.25/24 dev eth0 //ip與br0在同一網段中 [black@test ~]$ sudo ip netns exec $PID ip route add default via 10.10.10.10.1
在容器中查看容器的網絡設置如下
[root@affbcb8747eb /]# ifconfig eth0 Link encap:Ethernet Wadded D2:27:3D:9F:E8:AA inet addr:10.10.10.25 Bcast:0.0.0.0 Mask:255.255.255.0 inet6 addr: fe80::d027:3dff:fe9f:e8aa/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:8 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:648 (648.0 b) TX bytes:648 (648.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)
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持,
新聞熱點
疑難解答
圖片精選