docker 繫結固定ip 跨主機容器互訪

2021-10-03 08:50:30 字數 3789 閱讀 2271

之前使用pipework 分配靜態ip是暫時的,重啟之後就會失效,並且使用pipework繫結的ip 物理機,虛擬機器,docker容器的ip都在同一網段,這在生產環境是很困難的,下面使用docker自帶的network實現固定ip分配,並且重啟不會消失。

伺服器ip

容器分配網段

啟動容器的id

192.168.1.105

172.172.0.0/24

172.172.0.10

192.168.1.106

172.172.1.0/24

172.172.1.10

先操作192.168.1.105虛擬機器

第一步:建立自定義網路

docker network create --subnet=172.172.0.0/24 docker-br0
備註:這裡選取了172.172.0.0網段,也可以指定其他任意空閒的網段,docker-br0為自定義網橋的名字,可自己任意取名。

注意:這裡子網掩碼要使用255.255.255.0也就是ip後面的那個24,因為後面要使用iptables配置路由表,我之前使用255.255.0.0 無法配置.所以這裡配置成24.

建立網橋之後,使用ifconfig檢視 會多出乙個網橋,該網橋在docker啟動或者重啟之後,會自動顯示出來。永久的,可以使用docker network rm docker-br0 移除網橋。

第三步:測試本機和容器是否ping通

#測試宿主機

[root@e98109ef9fd6 /]# ping 192.168.1.105

ping 192.168.1.105 (192.168.1.105) 56(84) bytes of data.

64 bytes from 192.168.1.105: icmp_seq=1 ttl=64 time=0.099 ms

64 bytes from 192.168.1.105: icmp_seq=2 ttl=64 time=0.081 ms

#測試ping另一台虛擬機器

[root@e98109ef9fd6 /]# ping 192.168.1.106

ping 192.168.1.106 (192.168.1.106) 56(84) bytes of data.

64 bytes from 192.168.1.106: icmp_seq=1 ttl=63 time=1.67 ms

64 bytes from 192.168.1.106: icmp_seq=2 ttl=63 time=0.587 ms

到此給容器繫結固定ip 已完成,下面是 容器跨主機互相訪問。

第四步:在192.168.1.106虛擬機器上,給容器繫結固定ip, 按照之前 第一步到 第三步.

第五步:在兩個容器中互相訪問,發現跨主機容器互訪,並不能ping通。

[root@e98109ef9fd6 /]# ping 172.172.1.10

ping 172.172.1.10 (172.172.1.10) 56(84) bytes of data.

from 192.168.1.105 icmp_seq=1 destination host unreachable

from 192.168.1.105 icmp_seq=2 destination host unreachable

from 192.168.1.105 icmp_seq=3 destination host unreachable

[root@e98109ef9fd6 /]# ping 172.172.0.10

ping 172.172.0.10 (172.172.0.10) 56(84) bytes of data.

from 192.168.1.106 icmp_seq=1 destination host unreachable

from 192.168.1.106 icmp_seq=2 destination host unreachable

from 192.168.1.106 icmp_seq=3 destination host unreachable

第六步:配置路由表

#新增路由規則

ip route add 對方容器所在的ip網段/子網掩碼 via 對方虛擬機器ip dev 通過哪個網**信

如: ip route add 172.172.1.0/24 via 192.168.1.106 dev eno16777736    

新增完成之後,可以使用 route命令 檢視新增之後的規則,也可以使用 ip route del 172.172.1.0/24  移除路由規則

在192.168.1.105 和 192.168.1.106虛擬機器上,分別新增對應的路由規則!

192.168.1.105: ip route add 172.172.1.0/24 via 192.168.1.106 dev eno16777736 

192.168.1.106: ip route add 172.172.0.0/24 via 192.168.1.105 dev eno16777736 

第七步:在兩個容器中互相訪問,發現可以實現跨主機容器互相ping通了。

[root@e98109ef9fd6 /]# ping 172.172.1.10

ping 172.172.1.10 (172.172.1.10) 56(84) bytes of data.

64 bytes from 172.172.1.10: icmp_seq=1 ttl=62 time=0.636 ms

64 bytes from 172.172.1.10: icmp_seq=2 ttl=62 time=0.411 ms

64 bytes from 172.172.1.10: icmp_seq=3 ttl=62 time=0.472 ms

[root@8343ad7e7f0f /]# ping 172.172.0.10

ping 172.172.0.10 (172.172.0.10) 56(84) bytes of data.

64 bytes from 172.172.0.10: icmp_seq=1 ttl=62 time=0.920 ms

64 bytes from 172.172.0.10: icmp_seq=2 ttl=62 time=0.674 ms

64 bytes from 172.172.0.10: icmp_seq=3 ttl=62 time=0.657 ms

liunx繫結固定ip

vim etc sysconfig network scripts ifcfg eth0 device eth0 onboot yes 開機啟動 bootproto static 靜態ip dns1 192.168.1.1 dns ipaddr 192.168.0.115 ip位址 netmask ...

docker 分配固定 ip

為docker容器單獨分配ip,這樣就可以像使用vm一樣,進行遠端連線。實驗環境 windows7主機,centos7虛擬機器192.168.1.3 容器系統centos.6.7 安裝在虛擬機器192.168.1.3 1 首先建立子網 主機192.168.1.3中執行 docker network ...

Docker跨主機通訊

已安裝zookeeper。這裡使用前面mesos裡的zookeeper配置 sudo vi etc default docker etc default docker內容 docker add opts h tcp h unix var run docker.sock cluster store z...