1. 程式人生 > >使Docker容器擁有可被宿主機以外的機器直接訪問的獨立IP

使Docker容器擁有可被宿主機以外的機器直接訪問的獨立IP

我們常用的docker容器都是將ip埠對映到宿主機,通過宿主機IP進行訪問。外部無法直接訪問容器IP,下面簡單介紹下怎麼做到區域網內直接訪問docker容器IP。


自動化指令碼見 https://github.com/liwei128/my_pipework.git,一鍵執行,so easy


說明如下

一、準備工作

1.首先安裝pipework

下載:gitHub地址 https://github.com/jpetazzo/pipework.git

  

檔案上傳用sftp方式連線,put進行上傳      

將pipework檔案複製到/usr/bin/目錄下,並設定為可執行指令碼

cp pipework /usr/bin/

chmod +x /usr/bin/pipework

2.查詢我們的網絡卡名、網絡卡ip、以及預設閘道器,後面需要用到

          我的為ens33      172.16.3.217          172.163.3.1



二、開始設定IP

注意:此步驟可能會斷開與宿主機的連線,因為網絡卡ens33的ip發生了變化,建議寫成指令碼檔案.sh的形式執行

1. 刪除ens33上面的ip地址

    sudo ip addr del dev ens33 172.16.3.217/24

2. 新建網橋br0,並將ens33網絡卡橋接到br0

    sudo ip link add link ens33 dev br0 type macvlan mode bridge

3.給網橋br0設定ip (為原ens33上的ip)

    sudo ip addr add 172.16.3.217/24 dev br0

4.啟用br0

    sudo ip link set dev br0 up

5.給br0設定預設閘道器(為上面查詢到的預設閘道器),不然無法訪問

    sudo ip route add default via 172.16.3.1 dev br0

6.為docker容器指定IP地址

sudo pipework br0 cmv3-manager 172.16.3.251/[email protected]

sudo  pipework br0 cmv3-mysql 172.16.3.253/[email protected]

說明:br0是第3步新建的網橋名,cmv3-manager和cmv3-mysql是docker容器名,@前面表示你要為該容器設定的IP地 址,@後面為閘道器地址

這樣就將宿主機網絡卡以及docker容器接入了同一個網橋br0,實現區域網訪問容器ip。效果如下

 

三、回滾方案

如果你需要還原成原有的IP配置,只需要這樣:

    sudo ip link delete br0

    sudo service network restart

    sudo systemctl restart docker

注意:此步驟可能會斷開與宿主機的連線,因為網橋br0被刪除了,建議寫成指令碼檔案.sh的形式執行


我們常用的docker容器都是將ip埠對映到宿主機,通過宿主機IP進行訪問。外部無法直接訪問容器IP,下面簡單介紹下怎麼做到區域網內直接訪問docker容器IP。


自動化指令碼見 https://github.com/liwei128/my_pipework.git,一鍵執行,so easy


說明如下

一、準備工作

1.首先安裝pipework

下載:gitHub地址 https://github.com/jpetazzo/pipework.git

  

檔案上傳用sftp方式連線,put進行上傳      

將pipework檔案複製到/usr/bin/目錄下,並設定為可執行指令碼

cp pipework /usr/bin/

chmod +x /usr/bin/pipework

2.查詢我們的網絡卡名、網絡卡ip、以及預設閘道器,後面需要用到

          我的為ens33      172.16.3.217          172.163.3.1



二、開始設定IP

注意:此步驟可能會斷開與宿主機的連線,因為網絡卡ens33的ip發生了變化,建議寫成指令碼檔案.sh的形式執行

1. 刪除ens33上面的ip地址

    sudo ip addr del dev ens33 172.16.3.217/24

2. 新建網橋br0,並將ens33網絡卡橋接到br0

    sudo ip link add link ens33 dev br0 type macvlan mode bridge

3.給網橋br0設定ip (為原ens33上的ip)

    sudo ip addr add 172.16.3.217/24 dev br0

4.啟用br0

    sudo ip link set dev br0 up

5.給br0設定預設閘道器(為上面查詢到的預設閘道器),不然無法訪問

    sudo ip route add default via 172.16.3.1 dev br0

6.為docker容器指定IP地址

sudo pipework br0 cmv3-manager 172.16.3.251/[email protected]

sudo  pipework br0 cmv3-mysql 172.16.3.253/[email protected]

說明:br0是第3步新建的網橋名,cmv3-manager和cmv3-mysql是docker容器名,@前面表示你要為該容器設定的IP地 址,@後面為閘道器地址

這樣就將宿主機網絡卡以及docker容器接入了同一個網橋br0,實現區域網訪問容器ip。效果如下

 

三、回滾方案

如果你需要還原成原有的IP配置,只需要這樣:

    sudo ip link delete br0

    sudo service network restart

    sudo systemctl restart docker

注意:此步驟可能會斷開與宿主機的連線,因為網橋br0被刪除了,建議寫成指令碼檔案.sh的形式執行