?
This document uses PHP Chinese website manual Release
本節(jié)概述 Docker 的默認(rèn)網(wǎng)絡(luò)行為,包括默認(rèn)創(chuàng)建的網(wǎng)絡(luò)類型以及如何創(chuàng)建自己的用戶定義網(wǎng)絡(luò)。它還介紹了在單個主機(jī)上或跨主機(jī)集群創(chuàng)建網(wǎng)絡(luò)所需的資源。
有關(guān) Docker 如何與iptables
在 linux 主機(jī)上,請參見碼頭工人iptables
...
當(dāng)您安裝 Docke r時,它會自動創(chuàng)建三個網(wǎng)絡(luò)。您可以使用以下docker network ls
命令列出這些網(wǎng)絡(luò):
$ docker network ls NETWORK ID NAME DRIVER 7fca4eb8c647 bridge bridge 9f904ee27bf5 none nullcf03ee007fb4 host host
這三個網(wǎng)絡(luò)都構(gòu)建在 Docker 中。當(dāng)你運(yùn)行一個容器時,你可以使用該--network
標(biāo)志來指定你的容器應(yīng)該連接到哪個網(wǎng)絡(luò)。
該bridge
網(wǎng)絡(luò)是指docker0
存在于所有的碼頭工人安裝網(wǎng)絡(luò)。除非您使用該docker run --network=<NETWORK>
選項(xiàng)另外指定,否則默認(rèn)情況下,Docker 守護(hù)程序會將容器連接到此網(wǎng)絡(luò)。通過使用主機(jī)上的ifconfig
命令,您可以將此橋看作主機(jī)網(wǎng)絡(luò)堆棧的一部分。
$ ifconfig docker0 Link encap:Ethernet HWaddr 02:42:47:bc:3a:eb inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:47ff:febc:3aeb/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1 RX packets:17 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1100 (1.1 KB) TX bytes:648 (648.0 B)
所述none
網(wǎng)絡(luò)增加了一個容器為特定容器的網(wǎng)絡(luò)棧。該容器缺少網(wǎng)絡(luò)接口。附著在這樣一個容器上,看著它的堆棧,你會看到:
$ docker attach nonenetcontainer root@0cb243cd1293:/# cat /etc/hosts127.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 root@0cb243cd1293:/# ifconfig lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)root@0cb243cd1293:/#
注意:您可以從容器中分離并使其保持運(yùn)行狀態(tài)
CTRL-p CTRL-q
。
該host
網(wǎng)絡(luò)增加了主機(jī)的網(wǎng)絡(luò)堆棧上的容器。就網(wǎng)絡(luò)而言,主機(jī)和容器之間沒有隔離。例如,如果使用主機(jī)網(wǎng)絡(luò)運(yùn)行在端口80上運(yùn)行 Web 服務(wù)器的容器,則 Web 服務(wù)器在主機(jī)的端口80上可用。
這些none
和host
網(wǎng)絡(luò)不能直接在 Docker 中配置。但是,您可以配置默認(rèn)bridge
網(wǎng)絡(luò)以及您自己的用戶定義網(wǎng)橋。
默認(rèn)bridge
網(wǎng)絡(luò)存在于所有 Docker 主機(jī)上。如果您未指定其他網(wǎng)絡(luò),則新容器會自動連接到默認(rèn)bridge
網(wǎng)絡(luò)。
該docker network inspect
命令返回有關(guān)網(wǎng)絡(luò)的信息:
$ docker network inspect bridge[ { "Name": "bridge", "Id": "f7ab26d71dbd6f557852c7156ae0574bbf62c42f539b50c8ebde0f728a253b6f", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Containers": {}, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "9001" }, "Labels": {} }]
運(yùn)行以下兩個命令來啟動兩個busybox
容器,每個容器都連接到默認(rèn)bridge
網(wǎng)絡(luò)。
$ docker run -itd --name=container1 busybox 3386a527aa08b37ea9232cbcace2d2458d49f44bb05a6b775fba7ddd40d8f92c $ docker run -itd --name=container2 busybox 94447ca479852d29aeddca75c28f7104df3c3196d7b6d83061879e339946805c
bridge
啟動兩個容器后再次檢查網(wǎng)絡(luò)。這兩個busybox
容器都連接到網(wǎng)絡(luò)。記下它們的 IP 地址,這與主機(jī)上的 IP 地址不同,下面的例子會有所不同。
$ docker network inspect bridge{[ { "Name": "bridge", "Id": "f7ab26d71dbd6f557852c7156ae0574bbf62c42f539b50c8ebde0f728a253b6f", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.17.0.1/16", "Gateway": "172.17.0.1" } ] }, "Containers": { "3386a527aa08b37ea9232cbcace2d2458d49f44bb05a6b775fba7ddd40d8f92c": { "EndpointID": "647c12443e91faf0fd508b6edfe59c30b642abb60dfab890b4bdccee38750bc1", "MacAddress": "02:42:ac:11:00:02", "IPv4Address": "172.17.0.2/16", "IPv6Address": "" }, "94447ca479852d29aeddca75c28f7104df3c3196d7b6d83061879e339946805c": { "EndpointID": "b047d090f446ac49747d3c37d63e4307be745876db7f0ceef7b311cbba615f48", "MacAddress": "02:42:ac:11:00:03", "IPv4Address": "172.17.0.3/16", "IPv6Address": "" } }, "Options": { "com.docker.network.bridge.default_bridge": "true", "com.docker.network.bridge.enable_icc": "true", "com.docker.network.bridge.enable_ip_masquerade": "true", "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0", "com.docker.network.bridge.name": "docker0", "com.docker.network.driver.mtu": "9001" }, "Labels": {} }]
連接到默認(rèn)bridge
網(wǎng)絡(luò)的容器可以通過 IP 地址相互通信。Docker 不支持在默認(rèn)網(wǎng)橋上自動發(fā)現(xiàn)服務(wù)。如果您希望容器能夠通過容器名稱解析 IP 地址,則應(yīng)該使用用戶定義的網(wǎng)絡(luò)。您可以使用舊版docker run --link
選項(xiàng)將兩個容器鏈接在一起,但在大多數(shù)情況下不建議這樣做。
您可以attach
運(yùn)行container
以查看容器內(nèi)網(wǎng)絡(luò)的外觀。您連接為root
,因此您的命令提示符是一個#
字符。
$ docker attach container1 root@0cb243cd1293:/# ifconfig eth0 Link encap:Ethernet HWaddr 02:42:AC:11:00:02 inet addr:172.17.0.2 Bcast:0.0.0.0 Mask:255.255.0.0 inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:9001 Metric:1 RX packets:16 errors:0 dropped:0 overruns:0 frame:0 TX packets:8 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1296 (1.2 KiB) TX bytes:648 (648.0 B)lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
從容器內(nèi)部,使用該ping
命令測試到其他容器的 IP 地址的網(wǎng)絡(luò)連接。
root@0cb243cd1293:/# ping -w3 172.17.0.3PING 172.17.0.3 (172.17.0.3): 56 data bytes64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.096 ms64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.080 ms64 bytes from 172.17.0.3: seq=2 ttl=64 time=0.074 ms--- 172.17.0.3 ping statistics ---3 packets transmitted, 3 packets received, 0% packet loss round-trip min/avg/max = 0.074/0.083/0.096 ms
使用該cat
命令查看/etc/hosts
容器上的文件。這顯示容器識別的主機(jī)名和 IP 地址。
root@0cb243cd1293:/# cat /etc/hosts172.17.0.2 3386a527aa08127.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
要從container1
容器中分離并保持運(yùn)行,請使用鍵盤序列 CTRL-p CTRL-q。如果您愿意,請附加container2
并重復(fù)上述命令。
默認(rèn)docker0
網(wǎng)橋支持使用端口映射并docker run --link
允許網(wǎng)絡(luò)中的容器之間的docker0
通信。不建議使用這種方法。在可能的情況下,您應(yīng)該使用用戶定義的網(wǎng)橋。
建議使用用戶定義的橋接網(wǎng)絡(luò)來控制哪些容器可以相互通信,還可以啟用將容器名稱自動 DNS 解析為 IP 地址。Docker 提供用于創(chuàng)建這些網(wǎng)絡(luò)的默認(rèn)網(wǎng)絡(luò)驅(qū)動程序。您可以創(chuàng)建新的網(wǎng)橋,覆蓋網(wǎng)絡(luò)或 MACVLAN網(wǎng)絡(luò)。您還可以創(chuàng)建網(wǎng)絡(luò)插件或遠(yuǎn)程網(wǎng)絡(luò)以進(jìn)行完整的自定義和控制。
您可以根據(jù)需要創(chuàng)建盡可能多的網(wǎng)絡(luò),并且您可以在任何給定時間將容器連接到零個或多個這些網(wǎng)絡(luò)。另外,您可以在不重新啟動容器的情況下連接和斷開網(wǎng)絡(luò)中正在運(yùn)行的容器。當(dāng)容器連接到多個網(wǎng)絡(luò)時,其外部連接通過第一個非內(nèi)部網(wǎng)絡(luò)以詞匯順序提供。
接下來的幾節(jié)將更詳細(xì)地介紹 Docker 的每個內(nèi)置網(wǎng)絡(luò)驅(qū)動程序。
一個bridge
網(wǎng)絡(luò)是網(wǎng)絡(luò)在泊塢中使用的最常見的類型。橋梁網(wǎng)絡(luò)類似于默認(rèn)bridge
網(wǎng)絡(luò),但添加一些新功能并刪除一些舊功能。以下示例創(chuàng)建了一些橋接網(wǎng)絡(luò)并對這些網(wǎng)絡(luò)上的容器執(zhí)行了一些實(shí)驗(yàn)。
$ docker network create --driver bridge isolated_nw 1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b $ docker network inspect isolated_nw[ { "Name": "isolated_nw", "Id": "1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ { "Subnet": "172.21.0.0/16", "Gateway": "172.21.0.1/16" } ] }, "Containers": {}, "Options": {}, "Labels": {} }]$ docker network ls NETWORK ID NAME DRIVER 9f904ee27bf5 none nullcf03ee007fb4 host host 7fca4eb8c647 bridge bridge c5ee82f76de3 isolated_nw bridge
創(chuàng)建網(wǎng)絡(luò)后,可以使用該docker run --network=<NETWORK>
選項(xiàng)在其上啟動容器。
$ docker run --network=isolated_nw -itd --name=container3 busybox 8c1a0a5be480921d669a073393ade66a3fc49933f08bcc5515b37b8144f6d47c $ docker network inspect isolated_nw[ { "Name": "isolated_nw", "Id": "1196a4c5af43a21ae38ef34515b6af19236a3fc48122cf585e3f3054d509679b", "Scope": "local", "Driver": "bridge", "IPAM": { "Driver": "default", "Config": [ {} ] }, "Containers": { "8c1a0a5be480921d669a073393ade66a3fc49933f08bcc5515b37b8144f6d47c": { "EndpointID": "93b2db4a9b9a997beb912d28bcfc117f7b0eb924ff91d48cfa251d473e6a9b08", "MacAddress": "02:42:ac:15:00:02", "IPv4Address": "172.21.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} }]
您啟動到此網(wǎng)絡(luò)中的容器必須駐留在同一個 Docker 主機(jī)上。網(wǎng)絡(luò)中的每個容器可以立即與網(wǎng)絡(luò)中的其他容器進(jìn)行通信。雖然,網(wǎng)絡(luò)本身將容器與外部網(wǎng)絡(luò)隔離開來。
在用戶定義的網(wǎng)橋網(wǎng)絡(luò)中,不支持連接.。你可以公開和發(fā)布集裝箱港口在這個網(wǎng)絡(luò)中的容器上。如果您想要使部分bridge
外部網(wǎng)絡(luò)可用的網(wǎng)絡(luò)。
在希望在單個主機(jī)上運(yùn)行相對較小的網(wǎng)絡(luò)的情況下,橋接網(wǎng)絡(luò)非常有用。但是,您可以通過創(chuàng)建網(wǎng)絡(luò)來創(chuàng)建更大的overlay
網(wǎng)絡(luò)。
docker_gwbridge
網(wǎng)絡(luò)這docker_gwbridge
是一個由 Docker 在兩種不同情況下自動創(chuàng)建的本地橋接網(wǎng)絡(luò):
初始化或加入群集時,Docker 會創(chuàng)建docker_gwbridge
網(wǎng)絡(luò)并將其用于不同主機(jī)上的群集節(jié)點(diǎn)之間的通信。
當(dāng)一個容器的網(wǎng)絡(luò)都不能提供外部連接時,docker_gwbridge
除容器的其他網(wǎng)絡(luò)外,Docker 還將容器連接到網(wǎng)絡(luò),以便容器可以連接到外部網(wǎng)絡(luò)或其他群集節(jié)點(diǎn)。
docker_gwbridge
如果需要自定義配置,您可以提前創(chuàng)建網(wǎng)絡(luò),否則 Docker 會根據(jù)需要創(chuàng)建它。以下示例docker_gwbridge
使用一些自定義選項(xiàng)創(chuàng)建網(wǎng)絡(luò)。
$ docker network create --subnet 172.30.0.0/16 \ --opt com.docker.network.bridge.name=docker_gwbridge \--opt com.docker.network.bridge.enable_icc=false \ docker_gwbridge
docker_gwbridge
使用overlay
網(wǎng)絡(luò)時,網(wǎng)絡(luò)始終存在。
您可以在沒有外部鍵值存儲的情況下在以群集模式運(yùn)行的管理器節(jié)點(diǎn)上創(chuàng)建覆蓋網(wǎng)絡(luò)。群體使覆蓋網(wǎng)絡(luò)只能用于群體中需要服務(wù)的節(jié)點(diǎn)。當(dāng)您創(chuàng)建使用覆蓋網(wǎng)絡(luò)的服務(wù)時,管理器節(jié)點(diǎn)會自動將覆蓋網(wǎng)絡(luò)擴(kuò)展到運(yùn)行服務(wù)任務(wù)的節(jié)點(diǎn)。
要了解有關(guān)在群集模式下運(yùn)行 Docker 引擎的更多信息,請參閱群集模式概述。
下面的例子顯示了如何創(chuàng)建一個網(wǎng)絡(luò)并將其用于群中管理器節(jié)點(diǎn)的服務(wù):
$ docker network create \ --driver overlay \ --subnet 10.0.9.0/24 \ my-multi-host-network 400g6bwzd68jizzdx5pgyoe95 $ docker service create --replicas 2 --network my-multi-host-network --name my-web nginx 716thylsndqma81j6kkkb5aus
只有群集服務(wù)可以連接到覆蓋網(wǎng)絡(luò),而不是獨(dú)立的容器。有關(guān)群集的更多信息,請參閱 Docker 群集模式覆蓋網(wǎng)絡(luò)安全模型和將服務(wù)附加到覆蓋網(wǎng)絡(luò)。
如果您未在群集模式下使用 Docker 引擎,則overlay
網(wǎng)絡(luò)需要有效的鍵值存儲服務(wù)。支持的鍵值存儲包括Consul,Etcd 和 ZooKeeper(分布式存儲)。在以這種方式創(chuàng)建網(wǎng)絡(luò)之前,您必須安裝并配置您選擇的鍵值存儲服務(wù)。Docker 托管您打算聯(lián)網(wǎng)并且該服務(wù)必須能夠通信。
注意:以群集模式運(yùn)行的 Docker Engine 與外部鍵值存儲的網(wǎng)絡(luò)不兼容。
對于大多數(shù) Docker 用戶,不推薦使用這種覆蓋網(wǎng)絡(luò)。它可以與獨(dú)立群集一起使用,并可能對在 Docker 之上構(gòu)建解決方案的系統(tǒng)開發(fā)人員有用。它可能在將來被棄用。如果您認(rèn)為您可能需要以這種方式使用覆蓋網(wǎng)絡(luò),請參閱本指南。
如果您的需求未被上述任何網(wǎng)絡(luò)機(jī)制解決,您可以使用 Docker 的插件基礎(chǔ)結(jié)構(gòu)編寫自己的網(wǎng)絡(luò)驅(qū)動程序插件。該插件將作為運(yùn)行 Docker 守護(hù)進(jìn)程的主機(jī)上的單獨(dú)進(jìn)程運(yùn)行。使用網(wǎng)絡(luò)插件是一個高級主題。
網(wǎng)絡(luò)插件遵循與其他插件相同的限制和安裝規(guī)則。所有插件都使用插件 API,并且具有包含安裝,啟動,停止和激活的生命周期。
一旦創(chuàng)建并安裝了自定義網(wǎng)絡(luò)驅(qū)動程序,就可以創(chuàng)建一個使用該驅(qū)動程序和該--driver
標(biāo)志的網(wǎng)絡(luò)。
$ docker network create --driver weave mynet
您可以檢查網(wǎng)絡(luò),連接和斷開容器,并刪除它。一個特定的插件可能有特定的要求,以便使用。查看插件的文檔以獲得特定信息。有關(guān)編寫插件的詳細(xì)信息,請參閱延伸碼頭和編寫網(wǎng)絡(luò)驅(qū)動插件...
Docker 守護(hù)程序運(yùn)行嵌入式 DNS 服務(wù)器,該服務(wù)器在連接到同一用戶定義網(wǎng)絡(luò)的容器中提供 DNS 解析,以便這些容器可以將容器名稱解析為IP地址。如果嵌入式 DNS 服務(wù)器無法解析請求,它將被轉(zhuǎn)發(fā)到為該容器配置的任何外部DNS服務(wù)器。為了便于創(chuàng)建容器,只有可訪問的嵌入式 DNS 服務(wù)器127.0.0.11
將在容器的resolv.conf
文件中列出。有關(guān)用戶定義網(wǎng)絡(luò)中嵌入式 DNS 服務(wù)器的更多信息,請參閱用戶定義網(wǎng)絡(luò)中的嵌入式 DNS 服務(wù)器
在 Docker 網(wǎng)絡(luò)中,有兩種直接涉及網(wǎng)絡(luò)端口的不同機(jī)制:公開和發(fā)布端口。這適用于默認(rèn)橋接網(wǎng)絡(luò)和用戶定義橋接網(wǎng)絡(luò)。
您使用EXPOSE
Dockerfile中的關(guān)鍵字或--expose
標(biāo)志暴露端口docker run
。公開端口是一種記錄使用哪些端口的方法,但并不實(shí)際映射或打開任何端口。公開端口是可選的。
您使用PUBLISH
Dockerfile 中的關(guān)鍵字或--publish
標(biāo)志來發(fā)布端口docker run
。這告訴 Docker 在容器的網(wǎng)絡(luò)接口上打開哪些端口。端口發(fā)布時,它將映射到30000
主機(jī)上的可用高端端口(高于),除非您在運(yùn)行時指定要在主機(jī)上映射的端口。您無法在 Dockerfile 中的主機(jī)上指定要映射到的端口,因?yàn)闊o法保證端口在您運(yùn)行映像的主機(jī)上可用。
本示例將容器中的端口80發(fā)布到32768
主機(jī)上的隨機(jī)高端口(在這種情況下)。該-d
標(biāo)志將導(dǎo)致容器在后臺運(yùn)行,以便您可以發(fā)出該docker ps
命令。
$ docker run -it -d -p 80 nginx $ docker ps 64879472feea nginx“nginx -g'daemon ...”43小時前Up大約一分鐘443 / tcp,0.0.0.0:32768->80/tcp blissful_mclean
下一個示例指定端口80應(yīng)映射到主機(jī)上的端口8080。如果端口8080不可用,它將失敗。
$ docker run -it -d -p 8080:80 nginx $ docker ps b9788c7adca3 nginx“nginx -g'daemon ...”43小時前上傳3秒80 / tcp,443 / tcp,0.0.0.0:8080->80 / tcp goofy_brahmagupta
如果您的容器需要使用 HTTP,HTTPS 或 FTP 代理服務(wù)器,則可以采用不同的方式對其進(jìn)行配置:
在 Docker 17.07及更高版本中,您可以配置 Docker 客戶端以自動將代理信息傳遞給容器。
在 Docker 17.06 及更低版本中,您必須在容器中設(shè)置適當(dāng)?shù)沫h(huán)境變量。您可以在構(gòu)建圖像時(這會使圖像的可移植性降低)或創(chuàng)建或運(yùn)行容器時執(zhí)行此操作。
僅限邊緣:此選項(xiàng)僅在Docker CE Edge版本中可用。請參閱Docker CE Edge。
在Docker客戶端上,創(chuàng)建或編輯~/.config.json
啟動容器的用戶的主目錄中的文件。添加JSON(如下所示),用代理服務(wù)器的類型httpsproxy
或ftpproxy
必要時替換代理服務(wù)器的類型,并替換代理服務(wù)器的地址和端口。您可以同時配置多個代理服務(wù)器。通過將noProxy
密鑰設(shè)置為一個或多個逗號分隔的IP地址或主機(jī),您可以選擇性地排除通過代理服務(wù)器的主機(jī)或范圍。*
如本例所示,支持使用字符作為通配符。{“proxies”:{“httpProxy”:“http://127.0.0.1:3001”,“noProxy”:“* .test.example.com,.example2.com”}}保存文件。
當(dāng)您創(chuàng)建或啟動新容器時,環(huán)境變量將在容器中自動設(shè)置。
當(dāng)您創(chuàng)建圖像或--env
在創(chuàng)建或運(yùn)行容器時使用該標(biāo)記時,可以將一個或多個以下變量設(shè)置為適當(dāng)?shù)闹?。此方法使圖像的可移植性降低,因此,如果您擁有 Docker 17.07或更高版本,則應(yīng)該配置 Docker 客戶端。
變量 | Dockerfile示例 | 碼頭運(yùn)行示例 |
---|---|---|
HTTP_PROXY | ENV HTTP_PROXY“http://127.0.0.1:3001” | --env HTTP_PROXY“http://127.0.0.1:3001” |
HTTPS_PROXY | ENV HTTPS_PROXY“https://127.0.0.1:3001” | --env HTTPS_PROXY“https://127.0.0.1:3001” |
FTP_PROXY | ENV FTP_PROXY“ftp://127.0.0.1:3001” | --env FTP_PROXY“ftp://127.0.0.1:3001” |
NO_PROXY | ENV NO_PROXY“* .test.example.com,.example2.com”| -env NO_PROXY“* .test.example.com,.example2.com”`| | |
在 Docker 包含用戶定義的網(wǎng)絡(luò)之前,您可以使用 Docker --link
功能來允許容器將另一個容器的名稱解析為IP地址,并且還允許它訪問鏈接容器的環(huán)境變量。在可能的情況下,您應(yīng)該避免使用遺留--link
標(biāo)志。
當(dāng)您創(chuàng)建鏈接時,當(dāng)您使用默認(rèn)bridge
網(wǎng)絡(luò)或使用用戶定義的網(wǎng)橋時,它們的行為會有所不同。有關(guān)詳細(xì)信息,請參閱默認(rèn)bridge
網(wǎng)絡(luò)中的鏈接功能的傳統(tǒng)鏈接以及用戶定義網(wǎng)絡(luò)中的鏈接容器,以獲取用戶定義網(wǎng)絡(luò)中的鏈接功能。
Linux 主機(jī)使用調(diào)用的內(nèi)核模塊iptables
來管理對網(wǎng)絡(luò)設(shè)備的訪問,包括路由,端口轉(zhuǎn)發(fā),網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)以及其他問題。iptables
當(dāng)您啟動或停止發(fā)布端口的容器時,當(dāng)您創(chuàng)建或修改網(wǎng)絡(luò)或?qū)⑷萜鞲郊拥剿鼈兓蚱渌c網(wǎng)絡(luò)相關(guān)的操作時,Docker會修改規(guī)則。
充分討論iptables
超出了這個話題的范圍。要查看哪些iptables
規(guī)則隨時有效,可以使用iptables -L
。多個表存在,你可以列出一個特定的表,例如nat
,prerouting
或者postrouting
,使用命令如iptables -t nat -L
。有關(guān)完整的文檔iptables
,請參閱netfilter / iptables。
通常,iptables
規(guī)則由初始化腳本或守護(hù)程序進(jìn)程創(chuàng)建,例如firewalld
。規(guī)則不會在系統(tǒng)重新啟動時持續(xù)存在,因此腳本或?qū)嵱贸绦虮仨氃谙到y(tǒng)引導(dǎo)時運(yùn)行,通常在運(yùn)行級別3或在網(wǎng)絡(luò)初始化之后運(yùn)行。請查閱您的Linux發(fā)行版的網(wǎng)絡(luò)文檔,以獲取有關(guān)使iptables
規(guī)則持久化的適當(dāng)方式的建議。
Docker 動態(tài)管理iptables
守護(hù)進(jìn)程的規(guī)則以及容器,服務(wù)和網(wǎng)絡(luò)。在Docker 17.06及更高版本中,您可以將規(guī)則添加到名為的新表中DOCKER-USER
,并且這些規(guī)則將在 Docker 自動創(chuàng)建任何規(guī)則之前加載。如果您需要預(yù)先填充iptables
Docker 運(yùn)行之前需要到位的規(guī)則,這會非常有用。
使用網(wǎng)絡(luò)命令
開始使用多主機(jī)網(wǎng)絡(luò)
在容器中管理數(shù)據(jù)
Docker機(jī)器概述
Docker群集概述
調(diào)查LibNetwork項(xiàng)目
網(wǎng)絡(luò),網(wǎng)絡(luò),iptables,用戶定義的網(wǎng)絡(luò),網(wǎng)橋,防火墻,端口