學(xué)習(xí)網(wǎng)絡(luò)之前需要理解:Docker捞稿、鏡像、容器之間的關(guān)系和區(qū)別。
可以粗暴的理解為:
Docker = 虛擬機(jī)軟件
鏡像 = 操作系統(tǒng)安裝包
容器就 = 啟動(dòng)的一個(gè)個(gè)輕量級(jí)的虛擬機(jī),包含內(nèi)核、網(wǎng)絡(luò)之類(lèi)的東西闹啦。
docker0
Docker啟動(dòng)之后,在宿主機(jī)上使用ip addr
命令可以看到其中有一個(gè)docker0
的網(wǎng)卡辕坝。
# 命令
ip addr
# 結(jié)果
...
5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
link/ether 02:42:d3:31:07:1f brd ff:ff:ff:ff:ff:ff
# 定義網(wǎng)段和掩碼位數(shù)為16位窍奋。
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
...
說(shuō)明:
docker0
網(wǎng)卡會(huì)隨著Docker啟動(dòng)而添加,Docker關(guān)閉而刪除酱畅。
網(wǎng)絡(luò)基礎(chǔ)說(shuō)明:
172.17.0.1/16 中的16表示掩碼位數(shù)為16位琳袄,也就是ip轉(zhuǎn)為二進(jìn)制后,前16位為子網(wǎng)掩碼纺酸。
二進(jìn)制的ip:00000000.00000000.00000000.00000000
加粗部分為子網(wǎng)掩碼位窖逗。
以172.17.0.1/16為例,可用ip為:172.17.0.2 ~ 172.17.255.254 也就是:2^(32-16) - 2 ≈ 65534個(gè)可用ip
以172.17.0.1/24為例餐蔬,可用ip為:172.17.0.2 ~ 172.17.0.254 也就是:2^(32-24) - 2≈254個(gè)可用ip
能夠看到該網(wǎng)卡的ip是xxx.xxx.0.1/16
碎紊。
看到這個(gè)差不多能聯(lián)想到路由器,因?yàn)榧依锩娴穆酚善骶褪?code>xxx.xxx.0.1作為網(wǎng)關(guān)樊诺。
那么docker0
和路由器有什么相似嗎仗考?
要搞清楚這個(gè)問(wèn)題,則需要研究研究Docker容器之間的通信词爬。
先說(shuō)結(jié)論:Docker容器之間秃嗜,默認(rèn)使用docker0作為路由進(jìn)行通信。
容器之間的通信
容器之間的通信測(cè)試
-
啟動(dòng)兩個(gè)tomcat容器,端口分別使用
8081
和8082
痪寻。# 8081 docker run -d -p 8081:8080 --name tomcat1 tomcat:8.5.57-jdk8-openjdk # 8082 docker run -d -p 8082:8080 --name tomcat2 tomcat:8.5.57-jdk8-openjdk
-
再使用
ip addr
查看宿主機(jī)網(wǎng)卡情況螺句,會(huì)發(fā)現(xiàn)多出來(lái)了兩張網(wǎng)卡。# 宿主機(jī)執(zhí)行命令 ip addr # 輸出結(jié)果 ... 5: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default link/ether 02:42:d3:31:07:1f brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever inet6 fe80::42:d3ff:fe31:71f/64 scope link valid_lft forever preferred_lft forever # 可以看到比剛剛多出來(lái)了2張網(wǎng)卡 # 第一張網(wǎng)卡橡类。7: veth8ee7065@if6,對(duì)應(yīng)tomcat1 7: veth8ee7065@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 52:fe:db:26:b9:40 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::50fe:dbff:fe26:b940/64 scope link valid_lft forever preferred_lft forever # 第二張網(wǎng)卡芽唇。9: veth96e86e0@if8顾画,對(duì)應(yīng)tomcat2 9: veth96e86e0@if8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 6a:d0:55:36:5d:1a brd ff:ff:ff:ff:ff:ff link-netnsid 1 inet6 fe80::68d0:55ff:fe36:5d1a/64 scope link valid_lft forever preferred_lft forever ...
-
進(jìn)入tomcat1內(nèi)部,查看該容器的網(wǎng)卡匆笤,發(fā)現(xiàn)和宿主機(jī)上的新增加的第一張網(wǎng)卡是一對(duì)兒研侣,并且發(fā)現(xiàn)ip是docker0網(wǎng)段下面的ip。
網(wǎng)絡(luò)知識(shí):在一個(gè)網(wǎng)段下炮捧,
xxx.xxx.0.1
作為保留ip庶诡,對(duì)該網(wǎng)段下的通信進(jìn)行路由。# 以交互模式進(jìn)入tomcat1容器內(nèi)部 docker exec -it tomcat1 bash # 查看容器網(wǎng)卡 ip addr # 輸出結(jié)果 ... # 和宿主機(jī)的第一張網(wǎng)卡是一對(duì)兒咆课。 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 0 # ip是docker0網(wǎng)段下面的ip inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 valid_lft forever preferred_lft forever ...
通過(guò)同樣的方法末誓,能夠查詢(xún)到tomcat2的ip為172.17.0.3。
-
再次進(jìn)入tomcat1內(nèi)部书蚪,嘗試ping tomcat2的ip喇澡,發(fā)現(xiàn)可以ping通。
# 以交互模式進(jìn)入tomcat1容器內(nèi)部 docker exec -it tomcat1 bash # ping tomcat2 ping 172.17.0.3 # 輸出結(jié)果 PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data. 64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.202 ms 64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.172 ms
-
在tomcat1中ping 宿主機(jī)的主ip殊校,發(fā)現(xiàn)可以ping通的晴玖。但是網(wǎng)段不同是怎么ping通的呢?
肯定是通過(guò)了一個(gè)東西中轉(zhuǎn)为流,不然說(shuō)不通呕屎。
那么可以猜測(cè)進(jìn)行中轉(zhuǎn)的要么是
docker0
,要么是通過(guò)宿主機(jī)和容器之間出現(xiàn)的那一對(duì)兒網(wǎng)卡進(jìn)行中轉(zhuǎn)敬察。# 以交互模式進(jìn)入tomcat1容器內(nèi)部 docker exec -it tomcat1 bash # ping宿主機(jī)的主ip:192.168.24.210 ping 192.168.24.210 # 輸出結(jié)果 PING 192.168.24.210 (192.168.24.210) 56(84) bytes of data. 64 bytes from 192.168.24.210: icmp_seq=1 ttl=64 time=0.140 ms 64 bytes from 192.168.24.210: icmp_seq=2 ttl=64 time=0.091 ms
-
通過(guò)宿主機(jī)上通過(guò)
ip addr
查看新增的網(wǎng)卡秀睛,大致可以看出:宿主機(jī)和容器之間出現(xiàn)的那一對(duì)兒網(wǎng)卡也是通過(guò)docker0
轉(zhuǎn)發(fā)的。# 宿主機(jī)執(zhí)行命令 ip addr # 輸出結(jié)果 ... # 第一張網(wǎng)卡静汤。7: veth8ee7065@if6琅催,對(duì)應(yīng)tomcat1 # 通過(guò)mtu 1500 qdisc noqueue master docker0 state UP group default這句話(huà) # 能大致看出來(lái)是通過(guò)了docker0轉(zhuǎn)發(fā) 7: veth8ee7065@if6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default link/ether 52:fe:db:26:b9:40 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet6 fe80::50fe:dbff:fe26:b940/64 scope link valid_lft forever preferred_lft forever ...
-
在宿主機(jī)上ping tomcat2 發(fā)現(xiàn)也可以ping通。
# 宿主機(jī)上ping tomcat2 ping 172.17.0.3 # 輸出結(jié)果 PING 172.17.0.3 (172.17.0.3) 56(84) bytes of data. 64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.128 ms 64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.102 ms
容器之間的通信結(jié)論
結(jié)合對(duì)網(wǎng)絡(luò)基礎(chǔ)認(rèn)識(shí)虫给,可以得到結(jié)論:
- 容器之間可以通過(guò)
docker0
中轉(zhuǎn)藤抡,實(shí)現(xiàn)相互通信。 - 宿主機(jī)和容器之間也是通過(guò)
docker0
實(shí)現(xiàn)互相通信抹估。 - 宿主機(jī)和容器之間缠黍,使用一對(duì)兒虛擬網(wǎng)卡,通過(guò)
docker0
進(jìn)行通信药蜻。這個(gè)通信技術(shù)就是veth pair
技術(shù)瓷式。
網(wǎng)絡(luò)拓?fù)鋱D大致如下:
--link
(不常用)
根據(jù)上面的測(cè)試替饿,發(fā)現(xiàn)容器之間是可以使用ip通過(guò)docker0互相訪問(wèn)的。
但是容器每次啟動(dòng)的時(shí)候贸典,容器ip是有可能發(fā)生變化的视卢。
如果發(fā)生變化,之前配置的ip就極有可能是訪問(wèn)不到的廊驼。要怎么解決這個(gè)問(wèn)題呢据过?
--link
測(cè)試
參考Spring Cloud
的服務(wù)名調(diào)用,是否docker也可以通過(guò)容器名調(diào)用呢妒挎?這就需要使用--link
命令了绳锅。
使用方式:在容器啟動(dòng)的時(shí)候加上
--link
指令。詳細(xì)如下:
-
啟動(dòng)兩個(gè)tomcat酝掩,tomcat2使用
--link
連接tomcat1鳞芙。注意:
--link
的位置不能放到images
后面,否則可能會(huì)報(bào)錯(cuò)期虾。# 8081 docker run -d -p 8081:8080 --name tomcat1 tomcat:8.5.57-jdk8-openjdk # 8082原朝,使其連接tomcat1 docker run -d -p 8082:8080 --name tomcat2 --link tomcat1 tomcat:8.5.57-jdk8-openjdk
如果容器啟動(dòng)需要連接多個(gè)容器,則使用多個(gè)
--link
命令即可彻消。比如:# 連接多個(gè)容器 docker run -d -p 8082:8080 --name tomcat2 --link tomcat1 --link mysql tomcat:8.5.57-jdk8-openjdk
-
進(jìn)入tomcat2內(nèi)部竿拆,嘗試
ping tomcat1
發(fā)現(xiàn)可以通。# 以交互模式進(jìn)入容器內(nèi)部 docker exec -it tomcat2 bash # ping tomcat1 ping tomcat1 # 輸出結(jié)果 64 bytes from tomcat1 (172.17.0.2): icmp_seq=1 ttl=64 time=0.908 ms 64 bytes from tomcat1 (172.17.0.2): icmp_seq=2 ttl=64 time=0.106 ms ...
-
進(jìn)入tomcat1內(nèi)部宾尚,嘗試
ping tomcat2
發(fā)現(xiàn)不通丙笋。# 以交互模式進(jìn)入容器內(nèi)部 docker exec -it tomcat1 bash # ping tomcat2 ping tomcat2 # 輸出結(jié)果 ping: tomcat2: Temporary failure in name resolution # 嘗試ping tomcat2的ip,發(fā)現(xiàn)可以通煌贴。 ping 172.17.0.3 # 輸出結(jié)果 64 bytes from 172.17.0.3: icmp_seq=1 ttl=64 time=0.153 ms 64 bytes from 172.17.0.3: icmp_seq=2 ttl=64 time=0.101 ms ...
-
使用
inspect
查看tomcat2的元信息御板,發(fā)現(xiàn)在HostConfig.Links
的節(jié)點(diǎn)中多了tomcat1的配置。# 查看tomcat2的源信息 docker inspect tomcat2 # 輸出結(jié)果 "HostConfig": { ... "Links": [ "/tomcat1:/tomcat2/tomcat1" ], ... },
-
反觀tomcat1的元信息中沒(méi)有該配置牛郑。
# 查看tomcat1的源信息 docker inspect tomcat1 # 輸出結(jié)果 "HostConfig": { ... "Links": null ... },
-
進(jìn)入tomcat2內(nèi)部怠肋,找到
hosts
文件,可以很明顯看出來(lái)淹朋,docker將tomcat1的ip寫(xiě)到hosts
文件中了笙各。# 進(jìn)入容器內(nèi)部 docker exec -it tomcat2 bash # 查看hosts文件 cat /etc/hosts # 輸出結(jié)果 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters # 很明顯能夠看出來(lái),docker將tomcat1的ip寫(xiě)到hosts文件中了 172.17.0.2 tomcat1 74a446e44fa9 172.17.0.3 3d97defbb83b
-
將tomcat1停用础芍,并新啟動(dòng)容器tomcat3杈抢,再將tomcat1啟動(dòng)起來(lái)。目的是讓tomcat1容器的ip發(fā)生變化仑性。
很明顯能夠看出來(lái)惶楼,docker會(huì)自動(dòng)維護(hù)被關(guān)聯(lián)容器的新ip。
# 停用tomcat1 docker stop tomcat1 # 啟動(dòng)tomcat3,端口:8083 docker run -d -p 8083:8080 --name tomcat3 tomcat:8.5.57-jdk8-openjdk # 再次啟動(dòng)tomcat1 docker start tomcat1 # 進(jìn)入tomcat2內(nèi)部 docker exec -it tomcat2 bash # 查看hosts文件 cat /etc/hosts # 輸出結(jié)果 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters # 很明顯能夠看出來(lái)歼捐,docker會(huì)自動(dòng)維護(hù)被關(guān)聯(lián)容器的新ip何陆。 172.17.0.4 tomcat1 74a446e44fa9 172.17.0.3 3d97defbb83b
--link
結(jié)論
通過(guò)以上實(shí)驗(yàn),可以發(fā)現(xiàn)--link
其實(shí)就是在容器的/etc/hosts
文件中記錄了其他關(guān)聯(lián)容器的ip映射豹储。
并且當(dāng)被關(guān)聯(lián)的容器ip改變后贷盲,docker會(huì)自動(dòng)將新的ip維護(hù)到/etc/hosts
文件中。
自定義網(wǎng)絡(luò)(常用)
Docker默認(rèn)使用docker0
作為基礎(chǔ)網(wǎng)絡(luò)服務(wù)颂翼,多個(gè)容器之間使用--link
連接晃洒,使其能夠通過(guò)名稱(chēng)相互訪問(wèn)。
但是如果容器依賴(lài)較多朦乏,且雙向綁定,此時(shí)使用--link
就比較麻煩了氧骤,所以需要用到自定義網(wǎng)絡(luò)呻疹。
Docker自定義網(wǎng)絡(luò)默認(rèn)使用橋接模式(bridge)
,且自定義網(wǎng)絡(luò)容器之間可以直接通過(guò)容器名互相訪問(wèn)筹陵,沒(méi)有docker0
的限制刽锤。
自定義網(wǎng)絡(luò)測(cè)試
-
創(chuàng)建一個(gè)
mynet
網(wǎng)絡(luò),并指定子網(wǎng)范圍和網(wǎng)關(guān)朦佩。# 創(chuàng)建一個(gè)名叫mynet的網(wǎng)絡(luò)并思,并設(shè)置子網(wǎng)和網(wǎng)關(guān) # 16表示子網(wǎng)掩碼是前16位 # 也就是可用ip為:172.18.0.2 ~ 172.18.255.254 也就是:2^(32-16) - 2 ≈ 65534個(gè)可用ip docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 mynet
-
啟動(dòng)兩個(gè)tomcat,并指定連接到
mynet
網(wǎng)絡(luò)上语稠。# 8081 docker run -d -p 8081:8080 --name tomcat1 --network mynet tomcat:8.5.57-jdk8-openjdk # 8082宋彼,使其連接tomcat1 docker run -d -p 8082:8080 --name tomcat2 --network mynet tomcat:8.5.57-jdk8-openjdk
-
進(jìn)入tomcat1內(nèi)部,嘗試
ping tomcat2
發(fā)現(xiàn)可以通仙畦。# 進(jìn)入容器內(nèi)部 docker exec -it tomcat1 bash # ping tomcat2 ping tomcat2 # 輸出結(jié)果 PING tomcat2 (172.18.0.3) 56(84) bytes of data. 64 bytes from tomcat2.mynet (172.18.0.3): icmp_seq=1 ttl=64 time=0.173 ms 64 bytes from tomcat2.mynet (172.18.0.3): icmp_seq=2 ttl=64 time=0.117 ms ...
-
反之输涕,進(jìn)入tomcat2內(nèi)部,嘗試
ping tomcat1
發(fā)現(xiàn)也可以通慨畸。# 進(jìn)入容器內(nèi)部 docker exec -it tomcat2 bash # ping tomcat1 ping tomcat1 # 輸出結(jié)果 PING tomcat1 (172.18.0.2) 56(84) bytes of data. 64 bytes from tomcat1.mynet (172.18.0.2): icmp_seq=1 ttl=64 time=0.207 ms 64 bytes from tomcat1.mynet (172.18.0.2): icmp_seq=2 ttl=64 time=0.113 ms ...
-
查看tomcat容器元信息莱坎。
# 查看tomcat1元信息 docker inspect tomcat1 # 輸出結(jié)果 ... "NetworkSettings": { ... "Networks": { "mynet": { "IPAMConfig": null, "Links": null, "Aliases": [ "3fe6bc63d6d7" ], "NetworkID": "36116879e0017...", "EndpointID": "10ab48216424d8...", # 網(wǎng)關(guān) "Gateway": "172.18.0.1", # ip "IPAddress": "172.18.0.2", "IPPrefixLen": 16, "IPv6Gateway": "", "GlobalIPv6Address": "", "GlobalIPv6PrefixLen": 0, "MacAddress": "02:42:ac:12:00:02", "DriverOpts": null } } }
-
查看mynet網(wǎng)絡(luò)元信息。
# 查看net網(wǎng)絡(luò)元信息 docker network inspect mynet # 輸出結(jié)果 [ { # 網(wǎng)絡(luò)名稱(chēng) "Name": "mynet", "Id": "36116879e0017d2...", "Created": "2021-01-11T18:30:54.331993801+08:00", "Scope": "local", # 網(wǎng)絡(luò)模式 "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { # 子網(wǎng)范圍 "Subnet": "172.18.0.0/16", # 子網(wǎng)網(wǎng)關(guān) "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { # 容器ID寸士,對(duì)應(yīng)tomcat2 "09354b339db77b4...": { # 容器名稱(chēng) "Name": "tomcat2", "EndpointID": "ee2aaa8d75afcd14ece...", # MAC地址 "MacAddress": "02:42:ac:12:00:03", # tomcat2的ip "IPv4Address": "172.18.0.3/16", "IPv6Address": "" }, # 容器ID檐什,對(duì)應(yīng)tomcat1 "3fe6bc63d6d79e1...": { # 容器名稱(chēng) "Name": "tomcat1", "EndpointID": "10ab48216424d806619...", # MAC地址 "MacAddress": "02:42:ac:12:00:02", # tomcat1的ip "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]
命令集
查看所有網(wǎng)絡(luò)列表:docker network ls
-
語(yǔ)法
docker network ls [OPTIONS]
-
示例
# 查看所有網(wǎng)絡(luò)列表 docker network ls
連接容器到網(wǎng)絡(luò):docker network connect
-
語(yǔ)法
docker network connect [OPTIONS] NETWORK CONTAINER
-
示例
# 連接tomcat1到mynet網(wǎng)絡(luò) docker network connect mynet tomcat1
創(chuàng)建網(wǎng)絡(luò):docker network create
-
語(yǔ)法
docker network create [OPTIONS] NETWORK
-
重要參數(shù)
--subnet
:設(shè)置子網(wǎng)范圍--gateway
:設(shè)置子網(wǎng)網(wǎng)關(guān)-
--driver
:設(shè)置網(wǎng)絡(luò)類(lèi)型,可選值有:bridge
(默認(rèn))弱卡、host
乃正、container
、none
網(wǎng)絡(luò)模式 使用方法 說(shuō)明 bridge
--driver bridge
或缺省和宿主機(jī)網(wǎng)絡(luò)間使用橋接模式谐宙。 host
--driver host
和宿主機(jī)共享網(wǎng)絡(luò)(直連NAT)烫葬。 container
--driver container:[容器名稱(chēng)/ID]
和指定容器共享網(wǎng)絡(luò)。 none
--driver none
不設(shè)置網(wǎng)絡(luò)。
-
-
示例
# 示例1:創(chuàng)建一個(gè)名叫mynet的網(wǎng)絡(luò) docker network create mynet # 示例2:創(chuàng)建一個(gè)名叫mynet的網(wǎng)絡(luò)搭综,并設(shè)置子網(wǎng)和網(wǎng)關(guān) # 16表示子網(wǎng)掩碼是前16位 # 也就是可用ip為:172.18.0.2 ~ 172.18.255.254 也就是:2^(32-16) - 2 ≈ 65534個(gè)可用ip docker network create --subnet 172.18.0.0/16 --gateway 172.18.0.1 mynet # 示例3:創(chuàng)建一個(gè)名叫mynet的網(wǎng)絡(luò)垢箕,并設(shè)置為和主機(jī)使用nat直連(共享網(wǎng)絡(luò)) # 按照語(yǔ)法寫(xiě)的,沒(méi)有測(cè)試過(guò)兑巾,不知道真實(shí)是否可用条获。有可能要依據(jù)真實(shí)網(wǎng)絡(luò)情況配置。具體請(qǐng)參考官方文檔蒋歌。 docker network create --driver host mynet
斷開(kāi)容器網(wǎng)絡(luò):docker network disconnect
-
語(yǔ)法
docker network disconnect [OPTIONS] NETWORK CONTAINER
-
示例
# tomcat1斷開(kāi)mynet網(wǎng)絡(luò)連接 docker network disconnect mynet tomcat1
查看網(wǎng)絡(luò)元信息:docker network inspect
-
語(yǔ)法
docker network inspect [OPTIONS] NETWORK [NETWORK...]
-
示例
# 查看mynet網(wǎng)絡(luò)元信息 docker network inspect mynet
刪除所有無(wú)用網(wǎng)絡(luò):docker network prune
-
語(yǔ)法
docker network prune [OPTIONS]
-
示例
# 刪除所有無(wú)用網(wǎng)絡(luò)(沒(méi)有被連接的網(wǎng)絡(luò)) docker network prune
刪除指定網(wǎng)絡(luò):docker network rm
-
語(yǔ)法
docker network rm NETWORK [NETWORK...]
-
示例
# 刪掉mynet網(wǎng)絡(luò)(只有沒(méi)有被連接的網(wǎng)絡(luò)才能刪除) docker network rm mynet