banner
云野阁

云野阁

闲云野鹤,八方逍遥

實現Docker 容器跨主機通訊

[TOC]

方案一:docker swarm 集群#

https://blog.csdn.net/AMCUL/article/details/132913280

方案二:直接路由法#

在部署指南中提到的方法的實現分固定網段、路由持久化、IP 轉發三部分組成。

方法 1:#

修改並固定 docker0 的默認網段#
  1. 修改 docker0 網段 ip,在主機的 /etc/docker/daemon.json 文件中,加入如下內容:
#打開daemon.json文件
vi /etc/docker/daemon.json

#主機一中添加的內容
#172.16.200.1 為主機一的docker網段ip
{
 "bip": "172.16.200.1/24"
}

#主機二中添加的內容
#172.16.210.1 為主機二的docker網段ip
{
 "bip": "172.16.210.1/24"
}

#重啟docker服務
systemctl restart docker 
  1. 添加路由規則,主機間互相添加
#主機1上添加路由規則(添加主機2的ip和網段)
ip route add 172.16.210.0/24 via 172.20.1.52

#主機2上添加路由規則(添加主機1的ip和網段)
ip route add 172.16.200.0/24 via 172.20.1.51

#方式一:
#開啟路由轉發
iptables -P FORWARD ACCEPT

#方式二:
#配置iptables規則(本機的網段)
#主機一
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 172.16.200.0/24 ! -d 172.16.0.0/16 -j MASQUERADE

#主機二
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 172.16.210.0/24 ! -d 172.16.0.0/16 -j MASQUERADE
  1. 啟動容器並測試
# 主機1上啟動ubuntu容器
docker run -it --name node1 ubuntu:latest /bin/bash

# 主機2上啟動ubuntu容器
docker run -it --name node2 ubuntu:latest /bin/bash

#安裝測試工具
apt-get update
#安裝ping工具
apt-get install inetutils-ping -y
#安裝ip查看工具
apt-get install net-tools -y
路由持久化(防止主機重啟路由丟失)#
法一:(推薦)

/etc/sysconfig/network-scripts/目錄下創建名為route-enp0s3(enp0s3 為主機網卡的名字,以實際為準) 的文件

推薦此方法,注意創建時route-後跟的是本機主機的網卡名

vi /etc/sysconfig/network-scripts/route-enp0s3

#在此文件添加如下格式的內容
#主機一中添加
172.16.230.0/24 via 172.20.1.52
#主機二中添加
172.16.220.0/24 via 172.20.1.51

#重啟網絡驗證
service network restart


#查看路由表中是否有剛才添加的路由
ip route show | column -t
法二:

/etc/sysconfig/static-routes 文件裡添加如下內容 (沒有 static-routes 需手動建立)

#主機一中添加
any net 172.16.230.0/24 via 172.20.1.52
#主機二中添加
any net 172.16.220.0/24 via 172.20.1.51

#重啟網絡服務
systemctl restart network

#查看路由表中是否有剛才添加的路由
ip route show | column -t
開啟 IP 轉發#
#永久開啟
vi /etc/sysctl.conf
#修改
net.ipv4.ip_forward=1

方法 2:(適用於使用固定 ip 的容器)#

創建 docker 網絡#
  1. docker 橋接類型網絡創建

分別對兩台伺服器中的 docker 創建名字為 test 的網絡,指定子網範圍為 172.16.220.0/24 、172.16.230.0/24

#主機一
docker network create test --driver bridge --ipam-driver default --subnet 172.16.220.0/24

#主機二
docker network create test --driver bridge --ipam-driver default --subnet 172.16.230.0/24
#查看網絡
docker network ls
  1. 設置靜態路由
#主機1上添加路由規則(添加主機2的ip和網段)
ip route add 172.16.230.0/24 via 172.20.1.52

#主機2上添加路由規則(添加主機1的ip和網段)
ip route add 172.16.220.0/24 via 172.20.1.51

#開啟路由轉發
iptables -P FORWARD ACCEPT
  1. 啟動容器並測試
# 主機1上啟動ubuntu容器(加上創建的橋接網絡)
docker run -it --name node1 --net=test ubuntu:latest /bin/bash

# 主機2上啟動ubuntu容器(加上創建的橋接網絡)
docker run -it --name node2 --net=test ubuntu:latest /bin/bash

#安裝測試工具
apt-get update
#安裝ping工具
apt-get install inetutils-ping -y
#安裝ip查看工具
apt-get install net-tools -y
路由持久化(防止主機重啟路由丟失)#

使用nmtui 圖形化界面添加

 #下載nmtui
 yum install net-tools -y
 #顯示nmtui圖形化界面
 nmtui

在主機一網卡中配置主機二的 docker 網絡的 ip 段和 ip,在主機二網卡中配置主機一的 docker 網絡的 ip 段和 ip

#主機一中添加
172.16.230.0/24  172.20.1.52
#主機二中添加
172.16.220.0/24  172.20.1.51

配置完成會在 /etc/sysconfig/network-scripts 文件夾下看到

image-20240323221412716-1711203257505-1

image-20240323221442754-1711203286475-3

啟動對應主機的新創建的網卡(網絡重啟或系統重啟後會失效)

#主機一
nmcli c up br-aed92de88760
#主機二
nmcli c up br-0ab3914edle2

要使新網卡保持啟動則需將對應新創建的網卡文件中的ONBOOT=no改為ONBOOT=yes

#主機一
vi ifcfg-br-aed92de88760
#ONBOOT=no改為ONBOOT=yes
ONBOOT=yes
#主機二
vi ifcfg-br-0ab3914edle2
#ONBOOT=no改為ONBOOT=yes
ONBOOT=yes

#重啟網絡服務
systemctl restart network

image-20240323221537519-1711203339288-5

開啟 IP 轉發#
#永久開啟
vi /etc/sysctl.conf
#修改
net.ipv4.ip_forward=1

此時容器不受網絡重啟影響,可實現跨主機通訊。

但系統重啟後,所創建的 docker 網絡和容器均失效。

需要重新創建 docker 網絡和容器,此後 docker 網絡和容器均不受系統重啟和網絡重啟的影響,成功實現 docker 容器的跨主機通訊。

image-20240323221547069-1711203348713-7

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。