Docker 手動配置容器網絡實例詳解
Docker 手動配置容器網絡
docker容器的網絡是net命名空間與虛擬設備的結合,容器在啟動時會創(chuàng)建一對虛擬接口veth pair,這一對接口分別放到本地和容器中,在本地的veth會被分配類似vethxxxx的名稱并被橋接到指定網橋的上(默認為docker0),可以通過brctl show命令查看網橋上掛載的接口,在容器中的veth會從網橋獲取一個未使用地址,該veth的名稱會被更改為eth0并配置默認路由到vethxxxx,docker允許在啟動容器的時候通過--net參數(shù)指定不同的網絡類型。
--net=bridge:默認值,橋接到默認的網橋。
--net=host:不將容器網絡放到隔離的namespace,此時docker不會容器化容器內的網絡,這樣創(chuàng)建出來的容器使用的是本地的網絡,擁有完全的本地主機接口訪問權限。
--net=contianer:name_or_id:使用一個已經存在的容器的網絡棧,共享已存在容器的ip地址和端口等網絡資源。
--net=none:將新容器放到隔離的網絡棧中,不進行網絡配置,我們?yōu)槿萜髋渲镁W絡需要指定該項。
我的環(huán)境 :操作系統(tǒng)---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
在容器中查看網絡設置,可以發(fā)現(xiàn)只有本地環(huán)回接口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. 為容器創(chuàng)建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. 創(chuàng)建一對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)
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持,
相關文章
Docker下安裝Mongo4.2及客戶端工具連接Mongo
這篇文章主要介紹了Docker下安裝Mongo4.2和客戶端工具連接Mongo數(shù)據(jù)庫的方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-01-01Docker?AIGC等大模型深度學習環(huán)境搭建步驟最新詳細版
這篇文章主要介紹了Docker?AIGC等大模型深度學習環(huán)境搭建步驟最新詳細版,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-05-05Docker?安裝Redis?無法使用配置文件設置密碼問題及解決方法
最近開發(fā)需要使用各種組件,如果都到開發(fā)機上安裝,會占用電腦資源較多,所以使用docker容器來安裝這些組件,這篇文章主要介紹了Docker安裝Redis無法使用配置文件設置密碼問題,需要的朋友可以參考下2023-08-08docker運行nginx容器并掛載數(shù)據(jù)卷
本文主要介紹了docker運行nginx容器,并通過掛載目錄將容器與宿主機的數(shù)據(jù)進行共享和統(tǒng)一管理,具有一定的參考價值,感興趣的可以了解一下2025-03-03