天天看點

docker 指定ip開容器,并且和内網在同一個網段

docker 指定ip開機器,并且和内網在同一個網段

    第1步:建立自定義網絡
    備注:這裡選取了100.0.0.0網段,也可以指定其他任意空閑的網段
    docker network create --subnet=100.0.0.0/16 shadownet
    注:shadown為自定義網橋的名字,可自己任意取名。

    第2步:在你自定義的網段選取任意IP位址作為你要啟動的container的靜态IP位址
    備注:這裡在第二步中建立的網段中選取了100.0.0.10作為靜态IP位址。這裡以啟動shadowsocks為例。
    docker run -d --net shadownet --ip 100.0.0.10 --name test  --hostname test 鏡像名稱 
    docker run -tid --net shadownet --ip 100.0.0.10 --name test01  --hostname test01 ubuntusshd    
    
    第3步
    如果希望可以直接使用容器内的port和ip,那麼就把上面定義的網段設定為何内網網卡同一個網段,并且設定把内網的網卡添加到shadownet這個網橋中
    指令如下:
    
    brctl addif br-05da2d960ae0 eth0   :這個名稱你用brctl show 和ifconfig 檢視 确定哪一個是你的網橋即可      
1.建立自定義網絡
docker network create --subnet=172.10.83.0/24 shadownet

2.檢視docker網絡建立的網段
root@ubuntu:~# brctl show
bridge name    bridge id        STP enabled    interfaces
br-63b79e46dfef        8000.001a64c511c4    no        eth0
                            vethb34d864
                            vethe3a0421

                            
3.配置橋接eth0的網卡,br-63b79e46dfef這個網卡得根據上面brctl show的結果擷取
auto br-63b79e46dfef
iface br-63b79e46dfef inet static
address 172.10.0.83    ## 必須要是eth0,或者說是和你實體網絡在同一個網段   
netmask 255.255.0.0        ##和你的實體網絡事相同的掩碼  
bridge_ports eth0
bridge_stp off
bridge_fd 0
bridge_maxwait 0


4.
建立主機測試
docker run -d -P -p 1112:4201 --net shadownet --ip 172.10.83.12 --name gaogd-test-sshd02 --hostname gaogd-test-sshd02 ubuntu:latest

5.在其他主機ping 這個建立的網段      
1.第一步建立docker 的網絡
    docker network create --subnet=172.10.0.0/16 shadownet
    其中172.10.0.0/16 這個網段得和你伺服器的内網網段一緻
    
2.修改網絡網絡位址配置檔案
root@ubuntu:/etc# brctl show
bridge name    bridge id        STP enabled    interfaces
br-6b22c669ab26        8000.66bf785d1ad4    no        em2
                            vethdf73551
                            
                            
添加下面配置内容:其中br-6b22c669ab26這個網卡名稱,根據brctl show 檢視得出,brctl 指令需要額外安裝 apt-get install bridge-utils
auto br-6b22c669ab26        
iface br-6b22c669ab26  inet static
    address 172.10.0.1            ## 這個位址是你的内網網段位址,并且要是網段中的第一個可用ip,因為容器的預設網關指向網段的第一個可用ip
    netmask 255.255.0.0         ## 内網掩碼
    broadcast  172.10.0.255
    bridge_ports em2     ## 這個em2 是你内網網卡名稱
    bridge_stp off
    bridge_fd 0
    bridge_maxwait 0

    
3.重新開機網卡
sudo ifdown br-6b22c669ab26 && sudo ifup br-6b22c669ab26


4.檢視    em2 是否在 br-6b22c669ab26   網橋中
root@ubuntu:/etc# brctl show
bridge name    bridge id        STP enabled    interfaces
br-6b22c669ab26        8000.66bf785d1ad4    no        em2
                            vethdf73551
                            
                            
5.打開包轉發
echo 1 > /proc/sys/net/ipv4/ip_forward

6.開伺服器測試
 docker run -d -P -p 13:4201 --net shadownet --ip 172.10.89.3 --name gaogd-test-03 --hostname gaogd-test-03 ubuntussh:latest

7.進入伺服器
ping 172.10.0.1
ping 172.10.0.xx  内網的其他伺服器
ping www.baidu.com  如果成功就可以了


8.如果不可以,就抓包看具體情況,有可能需要做iptable 轉發,或者容器内的預設路由不是知道docker的主控端,在具體解決
 iptables -t nat -A POSTROUTING -s 172.10.0.0/16 -o em1 -j SNAT --to-source=203.166.162.89
具體問題具體分析了。      
上一篇: Pika 部署