1. 程式人生 > >Docker繫結固定IP/跨主機容器互訪

Docker繫結固定IP/跨主機容器互訪

前言

之前使用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 移除網橋。
                  

第二步:在你自定義的網段選取任意IP地址作為你要啟動容器IP

docker run -i -d --net docker-br0 --ip 172.172.0.10 --name nginx -v /usr/local/software/:/mnt/software/ 3bee3060bfc8 /bin/bash

備註:建立容器時,在第一步建立的網段中選取了172.172.0.10作為靜態IP地址。並且以docker-br0網橋啟動. -v是掛載,表示需要將本地哪個目錄掛載到容器中。3bee3060bfc8是映象ID

使用docker exec -it nginx /bin/bash 進入已啟動的容器,使用 yum install net-tools 下載 iptables 然後使用ifconfig檢視容器ip
                 

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

#測試ping 百度
[[email protected] /]# ping www.baidu.com
PING www.a.shifen.com (119.75.213.61) 56(84) bytes of data.
64 bytes from 119.75.213.61 (119.75.213.61): icmp_seq=1 ttl=56 time=10.1 ms
64 bytes from 119.75.213.61 (119.75.213.61): icmp_seq=2 ttl=56 time=8.26 ms

#測試宿主機
[
[email protected]
/]# 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另一臺虛擬機器 [[email protected] /]# 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通。
[[email protected] /]# 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

[[email protected] /]# 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通了。

[[email protected] /]# 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

[[email protected] /]# 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

相關推薦

Docker固定IP/主機容器互訪

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

Docker學習筆記 — Weave實現主機容器互聯

Docker的原生網路支援非常有限,且沒有跨主機的叢集網路方案。目前實現Docker網路的開源方案有Weave、Kubernetes、Flannel、Pipework以及SocketPlane等,其中Weave被評價為目前最靠譜的,那麼這裡就對Weave的基本原

實戰案例:構建docker容器集群 (解決方案一:使用自定義網橋連接主機容器

docker一、實驗環境虛擬機a兩塊網卡 eth0 eth1 (IP地址static或者dhcp)虛擬機b兩塊網卡 eth0 eth1 (IP地址static或者dhcp)二、在兩臺虛擬機上配置網橋虛擬機a操作:apt-get install bridge-utilsvim /etc/ne

利用iptables給Docker一個外網IP

背景 由於docker預設是不能夠與外部進行直接的通訊,比較普遍的彷彿是利用啟動時-p來與主機進行埠對映與外界溝通。但是有時候在有其他需求時並不太方便,特別是在進行一些docker打包之前的內部開發時,希望其能夠像虛機一樣能夠與外部有很好的通訊,便希望其能夠繫

華為雲--利用雲主機做SNAT,實現同子網其他未公網IP主機上網

環境介紹:Centos6.9雲主機一臺,主網絡卡繫結公網IP,副網絡卡未繫結公網IP,副網絡卡和後端主機在同一子網。 代理主機主網絡卡IP:192.168.11.60  所在子網網段:192.168.11.0/24    閘道器:192.168.11.1 代理主機副網絡卡

Docker主機容器間通信之overlay [十五]

boot mes ports usr unable network oot tcp 解決方案 一、配置overlay類型網絡準備工作 1、在luoahong3主機上 docker run -d -p 8500:8500 -h consul --name consul pr

Docker設置固定ip地址

自定義 esp idg err -i creat 橋接 response drive Docker安裝後,默認會創建下面三種網絡類型: $ docker network ls NETWORK ID NAME DRIVER SCOPE 978

主機容器間通訊解決方案

ping不通 端口 str mage 跨主機 fff 分享 技術 測試結果 1.docker集群間容器是否可以通信。 創建容器服務來測試:docker service create --name tomcat1 --replicas 2 192.168.56.200:500

docker中設定固定IP

Docker安裝後,預設會建立下面三種網路型別 $ docker network ls NETWORK ID NAME DRIVER SCOPE 9781b1f585ae bridge bridge local 1252da701e

docker之 網路模式和主機通訊

Docker的四種網路模式Bridge模式 當Docker程序啟動時,會在主機上建立一個名為docker0... Docker的四種網路模式 Bridge模式 當Docker程序啟動時,會在主機上建立一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連線到這個虛擬網橋上。虛擬網橋

主機容器網路方案

跨主機容器網路方案 在Kubernetes體系中,Kubernetes網路模型設計的一個基本原則:每個Pod都擁有一個獨立的IP地址,而且假定所有的Pod都在一個可以直接聯通的、扁平的網路空間中,不管他們是否執行在同一個Node(宿主機)中,都可以直接通過對方的IP進行訪問。也就是說

將域名ip上,並實現訪問不同二級子域名對應不同目錄

一、將域名繫結到ip上1、環境介紹:阿里雲伺服器ESC(美國矽谷)2、購買域名3、備案注:由於我買的是美國地區伺服器,所以不用備案,如果買的國內伺服器,這裡需要新增一個備案操作。4、域名實名認證5、將域名繫結到雲伺服器公網ip5.1、對購買的域名進行解析(點選解析按鈕)5.2

Centos系統的單網絡卡ip的設定

單個網絡卡,一個公網,一個內網ip的設定,可以參考下面的例子。OS Version: Centos 6.X Ethernet example:[[email protected] network-scripts]# pwd/etc/sysconfig/network-scripts[[email&#

Elasticsearch-6.5.3 在Centos7,Linux 虛擬機器環境下,設定IP地址

問題背景: Elasticsearch在Linux環境下安裝很簡單,只需要在官網下載相應的tar.gz壓縮包,並使用 Linux下的解壓命令,即可。解壓完成後,可以進入該目錄下,使用./bin/elasticsearch 命令來檢測是否成功啟動elasticsearch服務。這個很簡單,具體

一分鐘看懂Docker的網路模式和主機通訊

文章轉載自:http://www.a-site.cn/article/169899.html Docker的四種網路模式Bridge模式當Docker程序啟動時,會在主機上建立一個名為docker0...Docker的四種網路模式Bridge模式當Docker程序啟動時,會在主機上建立一個名為dock

Tomcat具體IP

       現在伺服器多是多網絡卡伺服器,可以搭建多個不同的Tomcat應用例項共享伺服器配置。 如果希望多個Tomcat應用伺服器能夠都使用80埠的話,需要對Tomcat進行配置,否則無法實現預期效果。        只需要在<Connector port="80

memcached安裝+訪問ip

安裝: 1.由於memcached是基於libevent的,需要安裝libevent,libevent-devel $yum -y install libevent libevent-devel 2.下載解壓emcached $ wget http://memcached.

轉帖:Linux雙網絡卡一個IP,實現容錯或負載均衡

其實早在08年9月就做了這個了,只不過最近在學RHCE的時候發現也有bond方面的內容。         發出來大家也學習一下。 實驗環境: CentOS5.3 eth0 eth1 1.先修改eth0 和eht1這2個網絡卡配置檔案。目錄在(/etc/sysconfig/network-scripts/)如

[Nginx]多個域名一個IP 的nginx設定

多個域名繫結在一個ip上 通過nginx反向代理 使得ip上的80埠在多個域名中可以使用 相關配置如下: nginx.conf 最後加上include /usr/local/nginx/conf/servers/XXX.conf; 即絕對路徑下的配置 XXX.

socketip為INADDR_ANY 的意義

socket INADDR_ANY 監聽0.0.0.0地址 socket只繫結埠讓路由表決定傳到哪個ip 其中INADDR_ANY就是指定地址為0.0.0.0的地址,這個地址事實上表示不確定地址,或“所有地址”、“任意地址”。 如果指定ip地址為通配地址(INADDR_