Docker 網路相關配置

2021-08-13 07:16:16 字數 2858 閱讀 4019

docker啟動的時候會在主機上自動建立乙個docker0虛擬網橋,實際上是乙個linux網橋,它會在掛載其上的藉口之間進行**

同時,docker隨機分配乙個本地未占用的私有網段中的乙個位址給docker介面,掩碼為255.255.0.0 且啟動的容器內的網口也會分配乙個同一網段的位址172.17.0.0/16

當我們建立乙個docker容器的時候,同是也會建立一對veth pair 介面,這對介面一端在容器內,即eth0,另一端被掛載到docker0網橋,名稱 以veth開頭,通過這種方式,主機可以跟容器通訊,容器之間也可以相互通訊,這樣一來,docker就建立了在主機和容器之間乙個虛擬共享網路。

其中的ip和子網掩碼以及mtu(介面允許接受的最大的傳輸單元),這些值都可以在服務啟動的時候進行配置

也可以在配置檔案中配置docker_opts,然後重啟服務

使用者可以通過 brctl show 來檢視網橋和埠連線資訊(brctl 系統如果沒有自帶可以使用 yum install bridge-utils 進行安裝)

[root@localhost

default]# brctl show

bridge name bridge id stp enabled inte***ces

docker0 8000.0242b7e1285f no vethc908ea6

virbr0 8000.525400afcadd yes virbr0-nic

目前 docker 不支援在啟動容器的時候指定ip位址

linux的網橋功能已經十分完善,但是可以通過替換為openvswitch等功能更強大的網橋實現

除了預設的docker0網橋,使用者也可以制動網橋來連線各個容器

在啟動docker服務的時候,使用-b 或者是 –bridge 來指定使用的網橋

關於如何自定義網橋:

docker支援自定義容器的主機名和dns配置

容器中的主機名和dns都是通過三個配置檔案來進行維護的

/etc/resolv.conf /etc/hostname /etc/hosts

啟動容器的的時候 可以通過 #:mount 命令看到三個檔案的掛載資訊

其中,/etc/resolv.conf 檔案在建立容器的時候,缺省會與宿主機中的/etc/resolv.conf檔案保持一致

如果要修改上面三個配置檔案,那麼這些修改只是臨時的,只在執行的容器中保留,當容器終止或者重啟後並不會被保留下來,也不會被 docker commit 提交

可以在建立或者啟動容器的時候使用下面的引數來自定義容器的配置

容器的訪問控制主要通過linux上的iptables防火牆軟體來進行管理和實現的

1、容器訪問外部網路

容器預設情況下是可以訪問到宿主機本地的,容器要是想通過宿主機訪問到外部網路,需要宿主機進行**

在宿主機linux系統檢查**是否開啟:

[root@localhost ~]# sysctl net.ipv4.ip_forward

net.ipv4.ip_forward = 1

如果值為0,則說明沒有開啟**,需要手動開啟

sysctl -w net.ipv4.ip_forward=1
或者在啟動容器服務的時候設定 –ip-forward=true 開啟宿主機的**服務

2、容器之間的訪問

容器之間的訪問需要兩方面的支援:

(1)訪問所有埠

(2)訪問指定㐰

在通過-icc=false 禁止容器間相互訪問後,仍可以通過–link=container_name:alias選項來允許訪問指定容器的開放埠

比如,在啟動docker 服務時,可以同時使用 icc=false –iptables==true引數來配置容器間禁止訪問,並允許docker自動修改系統中的iptables規則

系統中的iptables規則可能是類似如下的規則,禁止所有**流量

之後,啟動容器時,使用–link=container_name:alias選項,docker 會在iptable中為兩個互聯容器分別新增一條accept規則,允許相互訪問開放埠

容器允許外部訪問,可以在啟動容器的時候使用-p或-p引數來啟用

原理是在本地的iptable的nat表中新增相應的規則,將訪問外部ip位址的網包進行目標位址dnat,將目標位址修改為容器的ip位址

下面以乙個開放80埠的例子,使用-p時,會自動的對映本地一定範圍內的埠隨機埠到容器的80埠

可以看到nat表中涉及兩條鏈,prerouting鏈負責包到達網路介面時,改寫其目的位址,其中規則將所有流量都扔到docker鏈中,而docker鏈中將所有不是從docker0進來的網包,將目標埠為32768的,修改目標位址為172.17.0.2,目標 埠修改為80

使用-p 80:80時,跟上面類似,但是將本地的80埠對映到容器中的80埠

這裡有兩點需要注意:

1、這裡的規則映**0.0.0.0,也就意味著容器將接受任意網路的訪問,使用者可以通過-p ip::port 來繫結外部的網路介面,指定嚴格的訪問規則

2、也可以永久繫結到某個固定的ip位址,可以在docker配置檔案/etc/default/docker中 指定docker_opts=」–ip=ip_address」,之後重啟docker服務即可生效

docker網路相關

docker自定義網路的意義 docker 不同容器之間通過docker0相互通訊,docker0 相當於乙個路由,不容容器之間的通訊請求,通過docker0 從而實現通訊。而通過自定義網路可以實現容器之間通訊的隔離。自定義網路分類 bridge 橋接 docker 預設,自己建立也使用 bridg...

docker網路配置

檢視docker網路 docker network ls 檢視bridge 的ip docker inspect id 啟動乙個映象名字為aaa 設定網路host 網路預設為 bridge docker run itd name bbb centos bash host 網路ip和虛擬機器一樣 我們...

Docker網路配置

1 在沒有任何docker容器啟動時的原始宿主機網路如下 1.回環 2.物理網絡卡 3.4虛擬機器的 5.docker的網絡卡 2 啟動tomcat容器 docker run d p name tomcat test tomcat p是隨機埠 檢視當前已經有乙個啟動中的容器,是我們制定的tomcat...