【Docker】進階之路:(九)Docker網絡

【Docker】從零開始:19.Docker網絡

  • Docker網絡模式簡介
  • bridge網絡模式
  • host網絡模式
  • none網絡模式
  • container網絡模式
  • user-defined網絡模式
    • 1.創建自定義的bridge網絡
    • 2.使用自定義網絡
  • 高級網絡配置
    • docker network命令

為什么要了解容器的網絡模式?

首先,容器之間雖然不是物理隔離,但是它們彼此之間默認是不互聯互通的,這有助于保持每個容器的純粹性,相互之間互不影響。其次,既然使用了容器,那么通常情況下,容器需要與宿主機通信,或者A容器與B容器通信而B容器不需要知道A容器的存在,或者A、B兩容器相互通信。

容器與宿主機之間相互通信,就需要容器的網絡模式。

Docker有5種網絡模式,分別為bridge、host、none、container和user-defined,本章主要介紹這5種網絡模式。

Docker網絡模式簡介

基于對Network Namespace的控制,Docker可以為容器創建隔離的網絡環境。在隔離的網絡環境下,容器具有完全獨立的、與宿主機隔離的網絡棧,也可以使容器共享主機或者其他容器的網絡命名空間,基本滿足開發者在各種場景下的需要。按Docker官方的說法,Docker容器的網絡有以下幾種模式:

  • bridge(默認模式):此模式會為每一個容器分配、設置IP等,并將容器連接到一個docker0虛擬網橋,通過docker0網橋以及iptables nat表配置與宿主機通信。
  • host:容器將不會虛擬出自己的網卡、配置自己的IP,而是直接使用宿主機的IP和端口container:創建的容器不會創建自己的網卡、配置自己的IP,而是和一個指定的容裂共享IP、端口范圍。
  • none:該模式關閉了容器的網絡功能,與宿主機、其他容器都不連通。
    安裝Docker時,會自動創建三個網絡(bridge、host、none)。
[root@docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
06e024579653   bridge    bridge    local
e3950422af9c   host      host      local
dfda5ed1a176   none      null      local
[root@docker ~]# 

在使用docker run命令創建Docker容器時,可以用–net選項指定容器的網絡模式,幾種網絡模式的指定方式如下:

  • bridge網絡模式:使用-net=bridge指定,默認設置。
  • host網絡模式:使用–net=host指定。
  • none網絡模式:使用–net=none指定。
  • container網絡模式:使用–net=container:NAME or ID指定。

bridge網絡模式

bridge網絡模式是Docker默認的網絡設置,此模式會為每一個容器分配Network Namespace、設置IP等,并將一個主機上的Docker容器連接到一個虛擬網橋上,虛擬網橋會自動處理系統防火墻。bridge網絡模式下容器沒有公有IP,只有宿主機可以直接訪問,外部主機是不可見的,但容器通過宿主機的NAT規則后可以訪問外網。
在這里插入圖片描述
bridge網絡模式的實現步驟如下:

  • Docker守護進程利用veth pair技術,在宿主機上創建兩個虛擬網絡接口設備,假設為vetho和veth1,而veth pair技術的特性可以保證無論哪一個veth接收到網絡報文,都會將報文傳輸給另一方。
  • Docker守護進程將veth0附加到Docker守護進程創建的docker0網橋上,保證宿主機的網絡報文可以發往veth0。
  • Docker守護進程將veth1添加到Docker容器所屬的命名空間下,并被改名為eth0.如此一來,保證了宿主機的網絡報文若發往veth0,則立即會被ethO接收,實現宿主機到Docker容器網絡的連通性;同時,也保證了Docker容器能單獨使用eth0,實現容器網絡環境的隔離性。

當Docker Server啟動時,會在主機上創建一個名為docker0的虛擬網橋,此主機上啟動的Docker容器會連接到這個虛擬網橋上。虛擬網橋的工作方式和物理交換機類似,這樣主機上的所有容器就誦過交換機連在了一個二層網絡中。接下來就要為容器分配IP了,Docker會從RFC1918所定義的私有IP網段中選擇一個和宿主機不同的IP地址和子網分配給docker0,連接到docker0的容器就從這個子網中選擇一個未被占用的IP使用。比如,一般Docker會使用172.17.0.0/16這個網段,并將172.17.42.1/16分配給docker0網橋(在主機上使用ip addr命令可以看到docker0,可以認為它是網橋的管理端口,在宿主機上作為一塊虛擬網卡使用)。

啟動容器(由于是默認設置,因此這里沒指定網絡-net=bridge)就可以看到在容器內創建了eth0:

[root@docker ~]# docker run -it -P tomcat /bin/bash
root@aacb5bb995f4:/usr/local/tomcat# ipaddr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
6: eth0@if7: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0valid_lft forever preferred_lft forever
root@aacb5bb995f4:/usr/local/tomcat# 

使用ping命令連接宿主機網絡發現,容器與宿主機網絡是連通的:

PING 192.168.40.21 (192.168.40.21) 56(84) bytes of data.
64 bytes from 192.168.40.21: icmp_seq=1 ttl=64 time=0.073 ms
64 bytes from 192.168.40.21: icmp_seq=2 ttl=64 time=0.071 ms
64 bytes from 192.168.40.21: icmp_seq=3 ttl=64 time=0.079 ms
64 bytes from 192.168.40.21: icmp_seq=4 ttl=64 time=0.076 ms
64 bytes from 192.168.40.21: icmp_seq=5 ttl=64 time=0.238 ms
--- 192.168.40.21 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.071/0.107/0.238/0.065 ms
root@aacb5bb995f4:/usr/local/tomcat# 

eth0是veth pair的一端,另一端(veth5032adf)連接在docker0網橋上

[root@docker ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:08:a2:40 brd ff:ff:ff:ff:ff:ffinet 192.168.40.21/24 brd 192.168.40.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe08:a240/64 scope link valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:07:ab:1e:06 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:7ff:feab:1e06/64 scope link valid_lft forever preferred_lft forever
7: veth5032adf@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 76:06:de:e1:7e:e3 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet6 fe80::7406:deff:fee1:7ee3/64 scope link valid_lft forever preferred_lft forever
[root@docker ~]# 

bridge模式的缺陷是在該模式下Docker容器不具有一個公有IP,即和宿主機的eth0不處于同一個網段。導致的結果是宿主機以外的世界不能直接和容器進行通信的。

雖然NAT模式經過中間處理實現了這一點,但是NAT模式仍然存在問題與不便,比如:容器均需要在宿主機上競爭端口,容器內部服務的訪問者需要使用服務發現來獲取服務的外部端口,等等。另外,NAT模式由于是三層網絡上的實現手段,因此肯定會影響網絡的傳輸效率。

host網絡模式

如果啟動容器的時候使用host網絡模式,那么這個容器將不會獲得一個獨立的Network Namespace,而是和宿主機共用一個Network Namespace。容器將不會虛擬出自己的網卡、配置自己的IP等,而是使用宿主機的IP和端口,也沒有虛擬網橋,需要關閉防火墻外網才能被訪問到。

在這里插入圖片描述

使用host網絡模式啟動容器:

[root@docker ~]# docker run -it -P --net=host tomcat /bin/bash
root@docker:/usr/local/tomcat# 

查看網絡:

root@docker:/usr/local/tomcat# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000link/ether 00:0c:29:08:a2:40 brd ff:ff:ff:ff:ff:ffinet 192.168.40.21/24 brd 192.168.40.255 scope global ens33valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe08:a240/64 scope link valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:07:ab:1e:06 brd ff:ff:ff:ff:ff:ffinet 172.17.0.1/16 brd 172.17.255.255 scope global docker0valid_lft forever preferred_lft foreverinet6 fe80::42:7ff:feab:1e06/64 scope link valid_lft forever preferred_lft forever
root@docker:/usr/local/tomcat# 

none網絡模式

網絡環境為none,即不為Docker容器配置任何網絡環境。一旦Docker容器采用了none網絡模式,那么容器內部就只能使用loopback網絡設備,不會再有其他的網絡資源。可以說none模式為Docker容器做了最少的網絡設定。但是俗話說得好,“少即是多”,在沒有網絡配置的情況下.作為Docker開發者才能在這個基礎上做其他無限多可能的網絡定制開發。這也恰巧體現了Docker設計理念的開放。

在none網絡模式下,Docker容器擁有自己的Network Namespace,但是,并不為Docker容器進行任何網絡配置。也就是說,這個Docker容器沒有網卡、IP、路由等信息,需要我們自己為Docker容器添加網卡、配置IP等。

使用–net=none模式啟動容器:

[root@docker ~]# docker run -it -P --net=none tomcat /bin/bash
root@docker:/usr/local/tomcat# 

查看網絡:

root@docker:/usr/local/tomcat# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
root@docker:/usr/local/tomcat# 

container網絡模式

container網絡模式是bridge和host網絡模式的合體,優先以bridge模式啟動第一個容器,后面的所有容器啟動時,均指定網絡模式為container,它們均共享第一個容器的網絡資源,除了網絡資源外,其他資源在容器之間依然是相互隔離的。
處于container模式下的Docker容器會共享一個網絡棧,使得兩個容器之間可以使用localhost高效快速通信。

在這里插入圖片描述
container網絡模式的實現步驟如下:

  1. 查找其他容器(即需要被共享網絡環境的容器)的網絡命名空間。
  2. 將新創建的Docker容器(即需要共享其他網絡的容器)的命名空間,使用其他容器的命名空間。

Docker容器的container網絡模式可以用來更好地服務于容器間的通信。
在這種模式下,Docker容器可以通過localhost來訪問命名空間下的其他容器,傳輸效率較高。品然多個容器共享網絡環境,但是多個容器形成的整體依然與宿主機以及其他容器形成網絡隔離。另外,這種模式還節約了一定數量的網絡資源。
container網絡模式的缺陷是,它并沒有改善容器與宿主機以外世界通信的情況,與bridge模式一樣,不能連接宿主機以外的其他設備。

user-defined網絡模式

除了可以直接使用none、host、bridge、container這四種模式自動創建網絡外,Docker還有一種非常重要的網絡,即user-defined網絡,用戶可以根據業務需要創建user-defined網絡。
Docker提供三種user-defined網絡驅動:bridge、overlay和macvlan。其中overlay和macvlan用于創建跨主機的網絡。本節主要介紹如何創建和使用自定義的bridge網絡。

1.創建自定義的bridge網絡

執行如下命令通過bridge驅動創建一個類似Docker自帶的bridge網絡,網絡名稱為my_net

[root@docker ~]# docker network create --driver bridge my_net
fadc61adc807f72f61755c2d06e99ad1e8c36a7a398d690b9338cd7c2d39f163
[root@docker ~]# 

執行docker network ls命令可以看到,my_net這個自定義網絡已經創建成功了:

[root@docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
06e024579653   bridge    bridge    local
e3950422af9c   host      host      local
fadc61adc807   my_net    bridge    local
dfda5ed1a176   none      null      local
[root@docker ~]# 

使用docker network inspect命令可以查看這個網絡的配置信息,下面例子中的172.22.0.0/16是Docker自動分配的IP網段:

[root@docker ~]# docker network inspect my_net
[{"Name": "my_net","Id": "fadc61adc807f72f61755c2d06e99ad1e8c36a7a398d690b9338cd7c2d39f163","Created": "2023-12-08T16:01:04.189552638+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.18.0.0/16","Gateway": "172.18.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]
[root@docker ~]# 

還可以在創建網絡時通過–subnet和–gateway參數來指定IP網段:

[root@docker ~]# docker network create --driver bridge --subnet 172.22.18.0/24 --gateway 172.22.18.1 my_net2
77a453e666369f12d6cd76ae649c171be4538445c296b3ed2950e06b00659158
[root@docker ~]# 

可以看到這個新的bridge網絡使用的便是我們指定的IP網段:

[root@docker ~]# docker network inspect my_net2
[{"Name": "my_net2","Id": "77a453e666369f12d6cd76ae649c171be4538445c296b3ed2950e06b00659158","Created": "2023-12-08T16:04:58.935626813+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.22.18.0/24","Gateway": "172.22.18.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]
[root@docker ~]# 

2.使用自定義網絡

自定義網絡已經創建完成,可以在容器內使用自定義網絡了,在啟動時通過–network指定即可:

[root@docker ~]# docker run -it --network=my_net2 centos:7 /bin/bash
[root@03895d769537 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
12: eth0@if13: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:16:12:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.22.18.2/24 brd 172.22.18.255 scope global eth0valid_lft forever preferred_lft forever
[root@03895d769537 /]# 

由于my_net2網絡IP網段為172.22.18.0/24,因此這里可以看到容器分配到的IP為172.22.18.2

數指定一個靜態IP,而不是從subnet中自動分配:

docker run -it --network=my_net2 --ip 172.22.18.7 centos:7 /bin/bash

注意:只有使用-subnet參數創建的網絡才能指定靜態IP。如果自定義網絡創建時沒有指
定–subnet,那么容器啟動時指定靜態IP就會報錯。
可以看到容器已經使用我們指定的172.22.16.7這個IP了:

[root@docker ~]# docker run -it --network=my_net2 --ip 172.22.18.7 centos:7 /bin/bash
[root@fadd2aa8e079 /]#ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
14: eth0@if15: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:16:12:07 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.22.18.7/24 brd 172.22.18.255 scope global eth0valid_lft forever preferred_lft forever
[root@fadd2aa8e079 /]# 

高級網絡配置

在自定義網絡模式中,Docker提供了三種自定義網絡驅動:bridge、overlay和macvlan。bridge驅動類似默認的bridge網絡模式,但增加了一些新的功能;overlay和macvlan用于創建跨主機網絡。建議使用自定義的網絡來控制哪些容器可以相互通信,還可以自動使用DNS解析容器名稱到IP地址。下面介紹如何添加Docker的自定義網絡。
使用自動分配的IP地址和網關地址,添加bridge自定義網絡:

[root@docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
06e024579653   bridge    bridge    local
e3950422af9c   host      host      local
dfda5ed1a176   none      null      local
[root@docker ~]# 

創建自定義網絡模式:

[root@docker ~]# docker network create my_net1
438b3f575ef1b697053df6fb0828f8142f624584ff8637536ecfe8fb52c16864
[root@docker ~]# docker network ls
NETWORK ID     NAME      DRIVER    SCOPE
06e024579653   bridge    bridge    local
e3950422af9c   host      host      local
438b3f575ef1   my_net1   bridge    local
dfda5ed1a176   none      null      local
[root@docker ~]# 

使用docker network inspect my_net1查看bridge自定義網絡(自動分配的IP地址和網關地址)的信息:

[root@docker ~]# docker network inspect my_net1
[{"Name": "my_net1","Id": "438b3f575ef1b697053df6fb0828f8142f624584ff8637536ecfe8fb52c16864","Created": "2023-12-08T16:38:22.648544023+08:00","Scope": "local","Driver": "bridge","EnableIPv6": false,"IPAM": {"Driver": "default","Options": {},"Config": [{"Subnet": "172.19.0.0/16","Gateway": "172.19.0.1"}]},"Internal": false,"Attachable": false,"Ingress": false,"ConfigFrom": {"Network": ""},"ConfigOnly": false,"Containers": {},"Options": {},"Labels": {}}
]
[root@docker ~]# 

使用自定義網絡模式創建容器:

[root@docker ~]# docker run -it --name vm1 --network=my_net1 centos:7 /bin/bash
[root@76346a72fe31 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:13:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.19.0.2/16 brd 172.19.255.255 scope global eth0valid_lft forever preferred_lft forever
[root@76346a72fe31 /]# 

在自定義網橋上使用自定義的IP地址和網關地址,同一網橋上的容器是可以通信的,但必須是在自定義網橋上,默認的bridge模式不支持。使用–ip參數可以指定容器IP地址:

[root@docker ~]# [root@docker ~]# docker network create --subnet 172.22.18.0/24 --gateway 172.22.18.1 my_net2
[root@docker ~]# docker run -it --name vm2 --network=my_net2 --ip=172.22.18.6 centos:7 
[root@280a32d6a877 /]

值得注意的是:

  • Docker的bridge自定義網絡之間默認是有域名解析的。
  • Docker的bridge自定義網絡與系統自帶的網橋之間默認是有解析的。
  • Docker的系統自帶的網橋之間默認是沒有解析的。
    使用自定義網橋創建容器,自定義IP地址:
[root@docker ~]# docker run -it --name vm3 --network=my_net2 --ip=172.22.18.10 centos:7 
[root@b50c5aff69b1 /]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft forever
25: eth0@if26: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:ac:16:12:0a brd ff:ff:ff:ff:ff:ff link-netnsid 0inet 172.22.18.10/24 brd 172.22.18.255 scope global eth0valid_lft forever preferred_lft forever
[root@b50c5aff69b1 /]# 

默認使用不同網橋的容器是不可以通信的。

[root@b50c5aff69b1 /]# ping vm3
PING vm3 (172.22.18.10) 56(84) bytes of data.
64 bytes from b50c5aff69b1 (172.22.18.10): icmp_seq=1 ttl=64 time=0.036 ms
64 bytes from b50c5aff69b1 (172.22.18.10): icmp_seq=2 ttl=64 time=0.062 ms
64 bytes from b50c5aff69b1 (172.22.18.10): icmp_seq=3 ttl=64 time=0.046 ms
64 bytes from b50c5aff69b1 (172.22.18.10): icmp_seq=4 ttl=64 time=0.045 ms
^C
--- vm3 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 2999ms
rtt min/avg/max/mdev = 0.036/0.047/0.062/0.010 ms
[root@b50c5aff69b1 /]# ping vm1 -c 3
ping: vm1: Name or service not known
[root@b50c5aff69b1 /]# 

vml使用的是my_net1網橋,vm3使用的是my_net2網橋,默認是不能通信的。要使vm1和vm3通信,可以使用docker network connect命令為vml添加一塊mynet2的網卡:

[root@docker ~]# docker network connect my_net2 vm1
[root@docker ~]# docker attach vm1
[root@76346a72fe31 /]# ping vm3
PING vm3 (172.22.18.10) 56(84) bytes of data.
64 bytes from vm3.my_net2 (172.22.18.10): icmp_seq=1 ttl=64 time=0.096 ms
64 bytes from vm3.my_net2 (172.22.18.10): icmp_seq=2 ttl=64 time=0.083 ms
64 bytes from vm3.my_net2 (172.22.18.10): icmp_seq=3 ttl=64 time=0.100 ms
^C
--- vm3 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.083/0.093/0.100/0.007 ms
[root@76346a72fe31 /]# 

重新測試發現vm1和vm3成功通信。值得注意的是:Docker的bridge自定義網絡之間,雙方可以隨便添加對方的網卡。

  • Docker的bridge自定義網絡與系統自帶的網橋之間,只能是系統自帶的網橋對應的容器添加bridge自定義網絡對應的容器的網卡。反之則會報錯。
  • Docker的系統自帶的網橋之間是可以通信的,因為是在一個網絡橋接上的。

docker network命令

參數說明
connect讓容器連接到某個網絡
create創建一個新的網絡讓容器使用
inspect顯示一個或者多個網絡的信息
ls列出所有網絡
prune清除所有網絡緩存
rm刪除一個或者多個網絡

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208512.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208512.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208512.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

spark 寫入 mysql 報錯

報錯信息如下&#xff1a; "C:\Program Files\Java\jdk1.8.0_291\bin\java.exe" "-javaagent:D:\Hadoopruanjian\IDEA\IntelliJ IDEA 2021.3.2\lib\idea_rt.jar60971:D:\Hadoopruanjian\IDEA\IntelliJ IDEA 2021.3.2\bin" -Dfile.encodingUTF-8 -classpat…

工業級路由器在風力發電場的遠程監控技術

工業級路由器在風力發電場的遠程監控技術方面具有重要的應用意義。風力發電場通常由分布在廣闊地區的風力發電機組組成&#xff0c;需要進行實時監測、數據采集和遠程管理。工業級路由器作為網絡通信設備&#xff0c;能夠提供穩定可靠的網絡連接和多種遠程管理功能&#xff0c;…

深入探討Go語言協程調度:GRM模型解析與優化策略

一、線程調度 1、早期單線程操作系統 一切的軟件都是跑在操作系統上&#xff0c;真正用來干活&#xff08;計算&#xff09;的是 CPU早期的操作系統每個程序就是一個進程&#xff0c;直到一個程序運行完&#xff0c;才能進行下一個進程&#xff0c;就是“單進程時代”一切的程…

ES6中新增的基本數據類型----symbol

前言 Symbol 基本數據類型 獨一無二得值 Symbol函數創建 接收字符串 對symbol值得描述 let s1 Symbol(描述) /*** symbol 基本數據類型 表示獨一無二的值 Symbol函數創建獨一無二得值 參數可以是唯一值得描述*/ let sy1 Symbol();//創建好一個獨一無二得值 let sy2 Symbo…

EXP-00056: 遇到 ORACLE 錯誤 12154 ORA-12154: TNS: 無法解析指定的連接標識符

exp oas/oasoas filed:\daochu.dmp owner(s) 導出特定用戶 //exp 用戶名/密碼數據庫 filed:\daochu.dmp owner(用戶名) 1.重啟oracle監聽 cmd 中輸入 services.msc 找到服務&#xff1a;OracleOraDb10g_home1TNSListener 與 OracleServiceORCL。 把兩個服務啟動. 若未解決…

Vue 3 + Tailwind CSS:打造現代化項目的完美組合

Vue 3 Tailwind CSS&#xff1a;打造現代化項目的完美組合 本篇教程將向你介紹如何將 Tailwind CSS 與 Vue 3 項目搭配使用&#xff0c;為你的項目提供現代化的 UI 呈現和開發體驗。通過本文的逐步演示和示例代碼&#xff0c;你將很快掌握在 Vue 3 中集成和使用 Tailwind CSS…

SCI一區級 | Matlab實現GWO-CNN-BiLSTM-selfAttention多變量多步時間序列預測

SCI一區級 | Matlab實現GWO-CNN-BiLSTM-selfAttention多變量多步時間序列預測 目錄 SCI一區級 | Matlab實現GWO-CNN-BiLSTM-selfAttention多變量多步時間序列預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 1.Matlab實現GWO-CNN-BiLSTM-selfAttention灰狼算法優化卷…

IntelliJ idea卡頓解決,我遇到的比較管用的方案

Setttings> Build, Execution,Deployment>Debugger> Data Views> Java 取消 Enable "toString()" object view; Speed up debugging in IntelliJ Yesterday, I observed painfully slow debugging in IntelliJ. Every step over or step in took almost…

【力扣】234.回文鏈表2

234.回文鏈表2 感覺自己還是有點時間&#xff0c;然后又學了兩種解法。那就一起整理一下。 法一&#xff1a;反轉鏈表后比較 題解看我的這一篇就行&#xff08;click) 法二&#xff1a;數組雙指針 思路很簡單&#xff0c;就是用while循環遍歷一下整個鏈表將對應的值復制到…

2023年12月8日:UI登陸界面

作業 頭文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QMovie> #include <QPushButton> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpub…

GO語言開始

GO語言開始 下載windows版本安裝后查看 是否安裝成功下載GO的集成開發工具第一個GO程序 Go官網地址&#xff1a;https://golang.org/ Go 官方鏡像站&#xff08;推薦&#xff09;:https://golang.google.cn/dl/ 下載windows版本 安裝后查看 是否安裝成功 下載GO的集成開發工具…

鴻蒙原生應用開發【分布式數據對象】

01、什么是分布式數據對象 在可信組網環境下&#xff0c;多個相互組網認證的設備將各自創建的對象加入同一個 sessionId&#xff0c;使得加入的多個數據對象之間可以同步數據&#xff0c;也就是說&#xff0c;當某一數據對象屬性發生變更時&#xff0c;其他數據對象會檢測到這…

前端知識筆記(三十七)———Django與Ajax

特點&#xff1a; 異步提交 局部刷新 例子&#xff1a;github注冊 動態獲取用戶名實時的跟后端確認并實時的展示到前端&#xff08;局部刷新&#xff09; 朝后端發送請求的方式 1.瀏覽器地址欄直接輸入url回車 -----》get請求 2.a標簽的href屬性 -----》get請求 3…

pcl-3 pcl結合opencv做svm分類(法向量特征數據)

后續使用了fpfh特征作為訓練數據&#xff0c;遇到了一些困難 首先是flann沖突&#xff0c;這個將opcv中的flann都改成了flann2就可以運行 后面在將得到的33特征值進行訓練的時候一直內存超限&#xff0c;傳輸的不太好&#xff0c;到現在還是不行&#xff0c;改了三天還是沒有改…

Flink 系列文章匯總索引

Flink 系列文章 一、Flink 專欄 本專欄系統介紹某一知識點&#xff0c;并輔以具體的示例進行說明。 本專欄的文章編號可能不是順序的&#xff0c;主要是因為寫的時候順序沒統一&#xff0c;但相關的文章又引入了&#xff0c;所以后面就沒有調整了&#xff0c;按照寫文章的順…

OpenCL學習筆記(三)手動編譯開發庫(win10+mingw64)

前言 有的小伙伴仍然在使用mingw編譯器&#xff0c;這時只能重新編譯opencl的sdk庫。本文檔簡單記錄下win10下&#xff0c;使用mingw11.20編譯的過程&#xff0c;有需要的小伙伴可以參考下 一、安裝所需軟件 1.安裝git&#xff0c;教程比較多&#xff0c;不再重復 2.安裝cm…

chrome安裝jsonview

寫在前面 通過jsonview可以實現&#xff0c;當http響應時application/json時直接在瀏覽器格式化顯示&#xff0c;增加可讀性。本文看下如何安裝該插件到chrome中。 1&#xff1a;安裝 首先在這里 下載插件包&#xff0c;然后解壓備用。接著在chrome按照如下步驟操作&#xf…

千鋒 Vue 詳細筆記整理

視頻筆記是根據B站 千鋒 濤哥 - SpringBootvue前后端分離項目《鋒迷商城》實戰課-完結版 進行整理的 筆記可上 gitee倉庫 自取 千鋒 Vue 筆記整理 一、vue 的簡介1.1 使用 JQuery 的復雜性問題1.2 VUE 簡介1.2.1 前端框架1.2.2 MVVM 二、 vue 入門使用2.1 vue 的引入2.2 入門案…

WPF(Windows Presentation Foundation)的 StatusBar控件

WPF&#xff08;Windows Presentation Foundation&#xff09;的 StatusBar 是一種用于顯示狀態欄的控件。狀態欄是用于向用戶提供應用程序的狀態信息或其他相關信息的區域。它通常位于應用程序窗口的底部&#xff0c;并提供一些常見的功能&#xff0c;如顯示進度、狀態文本、通…

[C#] 基于 yield 語句的迭代器邏輯懶執行

眾所周知, C# 可以通過 yield 語句來快速向 IEnumerator 或者 IEnumerable 類型的方法返回值返回一個元素. 但它還有另外一個特性, 就是其內部邏輯的懶執行. 每兩個 yield 語句之間的邏輯都是一個狀態, 只有在調用迭代器的 MoveNext 方法后, 才會執行下一個狀態的邏輯. 在文章中…