Docker 網路模式及配置方式

2022-09-21 18:06:09 字數 3221 閱讀 8398

docker run 建立 docker 容器時,可以用 –net 選項指定容器的網路模式,docker 有以下 4 種網路模式:

host 模式,使用 –net=host 指定。

container 模式,使用 –net=container:name_or_id 指定。

none 模式,使用 –net=none 指定。

bridge 模式,使用 –net=bridge 指定,預設設定。

如果啟動容器的時候使用 host 模式,那麼這個容器將不會獲得乙個獨立的 network namespace,而是和宿主機共用乙個 network namespace。容器將不會虛擬出自己的網絡卡,配置自己的 ip 等,而是使用宿主機的 ip 和埠。

例如,我們在 10.10.101.105/24 的機器上用 host 模式啟動乙個含有 web 應用的 docker 容器,監聽 tcp 80 埠。當我們在容器中執行任何類似 ifconfig 命令檢視網路環境時,看到的都是宿主機上的資訊。而外界訪問容器中的應用,則直接使用 10.10.101.105:80 即可,不用任何 nat 轉換,就如直接跑在宿主機中一樣。但是,容器的其他方面,如檔案系統、程序列表等還是和宿主機隔離的。

這個模式指定新建立的容器和已經存在的乙個容器共享乙個 network namespace,而不是和宿主機共享。新建立的容器不會建立自己的網絡卡,配置自己的 ip,而是和乙個指定的容器共享 ip、埠範圍等。同樣,兩個容器除了網路方面,其他的如檔案系統、程序列表等還是隔離的。兩個容器的程序可以通過 lo 網絡卡裝置通訊。

程式設計客棧這個模式和前兩個不同。在這種模式下,docker 容器擁有自己的 network namespace,但是,並不為 docker容器進行任何網路配置。也就是說,這個 docker 容器沒有網絡卡、ip、路由等資訊。需要我們自己為 docker 容器新增網絡卡、配置 ip 等。

bridge 模式是 docker 預設的網路設定,此模式會為每乙個容器分配 network namespace、設定 ip 等,並將乙個主機上的 docker 容器連線到乙個虛擬網橋上。

當 docker server 啟動時,會在主機上建立乙個名為 docker0 的虛擬網橋,此主機上啟動的 docker 容器會連線到這個虛擬網橋上。

虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就通過交換機連在了乙個二層網路中。接下來就要為容器分配 ip 了,docker 會從 rfc1918 所定義的私有 ip 網段中,選擇乙個和宿主機不同的ip位址和子網分配給 docker0,連線到 docker0 的容器就從這個子網中選擇乙個未占用的 ip 使用。

如一般 docker 會使用 172.17.0.0/16 這個網段,並將 172.17.42.1/16 分配給 docker0 網橋(在主機上使用 ifconfig 命令是可以看到 docker0 的,可以認為它是網橋的管理介面,在宿主機上作為一塊虛擬網絡卡使用)

docker 容器在啟動時預設使用的是bridge 模式,docker 容器啟動後,會連線到乙個名為 docker0 的虛擬網橋,故每次啟動docker容器的ip都不是固定的,不方便管理,有時候需要進行固定ip對映,比如docker集群管理時。

docker容器設定固定ip時需要用到需要用到 pipework,用於給容器設定ip:

$ git clone

$ cp pipework/pipework /usr/local/bin/

$ yum -y install bridge-utils

$ brctl addbr br1

$ ip link set dev br1 up

$ ip addr add 192.168.10.1/24 dev br1

#基於 centos 這個映象啟動乙個容器,名為 centos-ip

$ docker run -d --name=centos-ip centos

$ pipework br1 centos-ip 192.168.10.20/24

為名為 centos-ip 的容器指定了ip 192.168.1程式設計客棧0.20

分別使用 ping 與 ssh 命令進行驗證,看是否可以ping通和成功登入

$ ping 192.168.10.20

$ ssh 192.168.10.20

注意:ssh時需要輸入容器centos的root密碼,如果在建立centos容器時未指定root密碼,可先進入容器設定root密碼:

docker exec -it 容器id/name

sudo passwd 程式設計客棧root

附: 刪除網橋

brctl show

#檢視網橋狀態

brctl delif 網橋名》 埠名》

#解除安裝網橋上的埠

ifconfig

#檢視是否有網橋網絡卡名

ifconfig 網橋名》 down

#關閉此網絡卡

brctl delbr 網橋名》

#刪除網橋

1、建立自定義網路

docker network create --subnet=192.168.10.1/24 network_my

# docker network ls

network id name driver scope

1fb22da7d8a3 bridge bridge local

fe259334b842 host host local

8c5971ff48d8 network_my bridge local

3aaf0356c19c none null local

2、 啟動docker容器

docke程式設計客棧r run -itd --name hadoop0 --hostname hadoop0 --net network_my --ip 192.168.10.30 -d -p -p 50070:50070 -p 8088:8088 hadoop:master

補充:docker 映象源更改與網路方式修改

docker 映象更改,在/etc/docker/daemon.json 新增映象位址,改用別的方式生效了。

重啟docker

systemctl restart docker systemctl status docker

居然生效了。

docker 的配置時而這樣生效,時而那樣生效,真是無語

本文標題: docker 網路模式及配置方式

本文位址:

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...

Docker 網路配置

docker 為我們提供了多種型別的網路模式,我們可以根據自己的需求使用系統預設的網路或者建立自己的網路。在我們安裝完 docker enginee 後,會自動生成3種預設的網路模式。我們可以執行命令檢視 bridge 使用docker 0 網路,containers只能在乙個host上面進行通訊。...