本文是篇翻譯。原文:https://docs.docker.com/engine/userguide/networking/
本節(jié)概述了Docker默認的網(wǎng)絡行為撞鹉,包括默認情況下創(chuàng)建的網(wǎng)絡類型以及如何創(chuàng)建用戶自定義網(wǎng)絡。 本文也描述了在單個主機或集群上創(chuàng)建網(wǎng)絡所需的資源。
有關Docker如何在Linux主機上與iptables
進行交互的詳細信息谎碍,請參閱Docker和iptables
卤恳。
默認網(wǎng)絡
當您安裝Docker時累盗,它會自動創(chuàng)建三個網(wǎng)絡,可使用docker network ls
命令列出這些網(wǎng)絡:
$ docker network ls
NETWORK ID NAME DRIVER
7fca4eb8c647 bridge bridge
9f904ee27bf5 none null
cf03ee007fb4 host host
Docker內置如上三個網(wǎng)絡突琳。 運行容器時若债,可使用--network
標志來指定容器應連接到哪些網(wǎng)絡。
bridge
網(wǎng)絡代表所有Docker安裝中存在的docker0
網(wǎng)絡拆融。 除非您使用docker run --network=<NETWORK>
選項蠢琳,否則Docker守護程序默認將容器連接到此網(wǎng)絡啊终。 可使用ip addr show
命令(或簡寫形式, ip a
)傲须,xia顯示該網(wǎng)橋的信息蓝牲。 ( ifconfig
命令已被棄用,根據(jù)系統(tǒng)的不同泰讽,還可能會command not found
錯誤例衍。)
$ ip addr show
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)
如何在Docker for Mac或Docker for Windows上運行?
如果您使用Docker for Mac(或在Docker for Windows上運行Linux容器)已卸,
docker network ls
命令將按照上述方式工作佛玄,但ip addr show
和ifconfig
命令可能會展示結果,但會給你本地主機的IP地址信息累澡,而不是Docker容器網(wǎng)絡梦抢。 這是因為Docker使用虛擬機中運行的網(wǎng)卡,而并非在宿主機的網(wǎng)卡永乌。要使用
ip addr show
或ifconfig
命令瀏覽Docker網(wǎng)絡惑申,請前往Docker Machine 查看相關文檔;如您使用的是云提供商翅雏,如AWS上的Docker Machine或Digital Ocean上的Docker Machine 圈驼。可使用docker-machine ssh <machine-name>
登錄到本地或云托管的機器望几,也可根據(jù)云提供商站點上的描述绩脆,直接ssh
。
none
網(wǎng)絡將容器添加到容器特定的網(wǎng)絡橄抹,該容器缺少網(wǎng)卡靴迫。Attach到一個網(wǎng)絡為none
模式的容器,將會看到類似如下的內容:
$ docker attach nonenetcontainer
root@0cb243cd1293:/# cat /etc/hosts
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
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:/#
注意 :可使用
CTRL-p CTRL-q
斷開容器連接并離開楼誓。
host
網(wǎng)絡模式將容器添加到在宿主機的網(wǎng)絡棧上玉锌。就網(wǎng)絡而言,宿主機和容器之間沒有隔離疟羹。例如主守,如果您使用host
網(wǎng)絡運行在80端口上運行一個Web服務器容器,則該容器可在宿主機的80端口上使用榄融。
在Docker中参淫,none
和 host
網(wǎng)絡模式不能直接配置。 但是愧杯,您可以配置默認的bridge
網(wǎng)絡涎才,以及用戶自定義的網(wǎng)橋。
默認網(wǎng)橋
所有Docker主機上都有默認的bridge
網(wǎng)絡力九。 如不指定網(wǎng)絡耍铜,容器將自動連接到默認的bridge
網(wǎng)絡邑闺。
docker network inspect
命令返回有關網(wǎng)絡的信息:
$ 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": {}
}
]
運行以下兩個命令啟動兩個busybox
容器,兩個容器都連接到默認的bridge
網(wǎng)絡业扒。
$ docker run -itd --name=container1 busybox
3386a527aa08b37ea9232cbcace2d2458d49f44bb05a6b775fba7ddd40d8f92c
$ docker run -itd --name=container2 busybox
94447ca479852d29aeddca75c28f7104df3c3196d7b6d83061879e339946805c
啟動兩個容器后再檢查bridge
網(wǎng)絡检吆。 這兩個busybox
容器都連接到網(wǎng)絡。 可看到類似如下的結果:
$ 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": {}
}
]
連接到默認bridge
網(wǎng)絡的容器可通過IP地址進行通信程储。 Docker不支持在默認網(wǎng)橋上自動發(fā)現(xiàn)服務蹭沛。如果您希望容器能夠通過容器名稱來解析IP地址,那么可使用用戶自定義網(wǎng)絡 章鲤。您可以使用遺留的docker run --link
選項將兩個容器連接在一起摊灭,但在大多數(shù)情況下不推薦使用。
您可以attach
到正在運行的容器败徊,查看容器內部的IP是什么帚呼。
$ docker attach container1
root@3386a527aa08:/# 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)
從容器內部,使用ping
命令測試與其他容器的網(wǎng)絡連接皱蹦。
root@3386a527aa08:/# ping -w3 172.17.0.3
PING 172.17.0.3 (172.17.0.3): 56 data bytes
64 bytes from 172.17.0.3: seq=0 ttl=64 time=0.096 ms
64 bytes from 172.17.0.3: seq=1 ttl=64 time=0.080 ms
64 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
文件煤杀。 該命令顯示容器識別的主機名和IP地址。
root@3386a527aa08:/# cat /etc/hosts
172.17.0.2 3386a527aa08
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
要從container1
容器離開沪哺,并保持容器的運行沈自,請依次使用CTRL-p CTRL-q 。 如果你愿意辜妓,也可attch到container2
枯途,并重復上面的命令。
默認的docker0
橋接網(wǎng)絡支持使用端口映射和docker run --link
籍滴,以便在docker0
網(wǎng)絡中的容器之間進行通信酪夷。 不推薦這種方法。 如果可以孽惰,請使用用戶定義的橋接網(wǎng)絡晚岭。
用戶自定義的網(wǎng)絡
建議使用用戶自定義網(wǎng)橋來控制哪些容器可以相互通信,這樣也可啟用自動DNS去解析容器名稱到IP地址勋功。 Docker提供了創(chuàng)建這些網(wǎng)絡的默認網(wǎng)絡驅動程序腥例。您可以創(chuàng)建一個新的橋接網(wǎng)絡, 覆蓋網(wǎng)絡或MACVLAN網(wǎng)絡 酝润。 您還可以創(chuàng)建一個網(wǎng)絡插件或遠程網(wǎng)絡進行完整的自定義和控制。
您可以根據(jù)需要創(chuàng)建任意數(shù)量的網(wǎng)絡璃弄,并且可在任意時間將容器連接到這些網(wǎng)絡中的零個或多個要销。 此外,您可以將運行著的容器連接或斷開網(wǎng)絡夏块,而無需重啟容器疏咐。當容器連接到多個網(wǎng)絡時纤掸,其外部連接通過第一個非內部網(wǎng)絡以詞匯順序提供。
接下來的幾節(jié)將詳細介紹Docker的內置網(wǎng)絡驅動程序浑塞。
網(wǎng)橋網(wǎng)絡
bridge
網(wǎng)絡是Docker中最常見的網(wǎng)絡類型借跪。 橋接網(wǎng)絡類似于默認的bridge
網(wǎng)絡,但添加一些新功能并刪除一些舊的能力酌壕。 以下示例創(chuàng)建了橋接網(wǎng)絡掏愁,并對這些網(wǎng)絡上的容器執(zhí)行一些實驗。
$ 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 null
cf03ee007fb4 host host
7fca4eb8c647 bridge bridge
c5ee82f76de3 isolated_nw bridge
創(chuàng)建網(wǎng)絡后卵牍,您可以使用docker run --network=<NETWORK>
選項啟動容器果港。
$ 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)絡的容器必須駐留在同一個Docker主機上。網(wǎng)絡中的每個容器可以立即與其他容器通信糊昙。 雖然網(wǎng)絡本身將容器與外部網(wǎng)絡隔離開來辛掠。
在用戶定義的橋接網(wǎng)絡中,不支持鏈接(link)释牺。 您可以在此網(wǎng)絡中的容器上暴露和發(fā)布容器端口 萝衩。 如果您希望使一部分bridge
網(wǎng)絡可用于外部網(wǎng)絡,這將非常有用没咙。
如果您希望在單個主機上運行相對較小的網(wǎng)絡猩谊,橋接網(wǎng)絡將非常有用。 但是镜撩,您可以通過創(chuàng)建overlay
網(wǎng)絡來創(chuàng)建更大的網(wǎng)絡预柒。
docker_gwbridge
網(wǎng)絡
docker_gwbridge
是由Docker在兩種不同情況下自動創(chuàng)建的本地橋接網(wǎng)絡:
- 當您初始化或加入swarm時,Docker會創(chuàng)建
docker_gwbridge
網(wǎng)絡袁梗,并將其用于不同主機上swarm節(jié)點之間的通信宜鸯。 - 當容器網(wǎng)絡不能提供外部連接時,除了容器的其他網(wǎng)絡之外遮怜,Docker將容器連接到
docker_gwbridge
網(wǎng)絡淋袖,以便容器可以連接到外部網(wǎng)絡或其他swarm節(jié)點。
如果您需要自定義配置锯梁,您可以提前創(chuàng)建docker_gwbridge
網(wǎng)絡即碗,否則Docker會根據(jù)需要創(chuàng)建它。 以下示例使用一些自定義選項創(chuàng)建docker_gwbridge
網(wǎng)絡陌凳。
$ 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
當您使用overlay
網(wǎng)絡時剥懒, docker_gwbridge
網(wǎng)絡始終存在。
swarm模式下的覆蓋網(wǎng)絡
當Docker在swarm模式下運行時合敦,您可以在管理節(jié)點上創(chuàng)建覆蓋網(wǎng)絡初橘,而無需外部key-value存儲。swarm使覆蓋網(wǎng)絡僅可用于需要服務的swarm節(jié)點。 當您創(chuàng)建使用覆蓋網(wǎng)絡的服務時保檐,管理節(jié)點會自動將覆蓋網(wǎng)絡擴展到運行服務任務的節(jié)點耕蝉。
要了解有關在swarm模式下運行Docker Engine的更多信息,請參閱Swarm模式概述 夜只。
下面的示例顯示了如何創(chuàng)建網(wǎng)絡并將其用于來自swarm管理節(jié)點的服務:
$ 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
只有swarm服務可以連接到覆蓋網(wǎng)絡垒在,而不是獨立的容器。 有關群集的更多信息扔亥,請參閱Docker swarm模式覆蓋網(wǎng)絡安全模型 以及 將服務附加到覆蓋網(wǎng)絡 场躯。
非swarm模式下的覆蓋網(wǎng)絡
如果您不是在swarm模式下使用Docker Engine,那么overlay
網(wǎng)絡需要有效的key-value存儲砸王。 支持的key-value存儲包括Consul推盛,Etcd和ZooKeeper(分布式存儲)。 在以這種方式創(chuàng)建網(wǎng)絡之前谦铃,您必須安裝并配置您所選擇的key-value存儲服務耘成。 網(wǎng)絡中的Docker宿主機、服務必須能夠進行通信驹闰。
注意 :以swarm模式運行的Docker Engine與使用外部key-value存儲的網(wǎng)絡不兼容瘪菌。
對于大多數(shù)Docker用戶,不推薦這種使用覆蓋網(wǎng)絡的方法嘹朗。它可以與獨立的swarm一起使用师妙,可能對在Docker頂部構建解決方案的系統(tǒng)開發(fā)人員有用。 將來可能會被棄用屹培。 如果您認為可能需要以這種方式使用覆蓋網(wǎng)絡默穴,請參閱本指南 。
自定義網(wǎng)絡插件
如果任何上述網(wǎng)絡機制無法滿足您的需求褪秀,您可以使用Docker的插件基礎架構編寫自己的網(wǎng)絡驅動插件蓄诽。 該插件將在運行Docker deamon的主機上作為單獨的進程運行。 使用網(wǎng)絡插件是一個高級主題媒吗。
網(wǎng)絡插件遵循與其他插件相同的限制和安裝規(guī)則仑氛。 所有插件都使用插件API,并具有包含了安裝闸英,啟動锯岖,停止和激活的生命周期。
創(chuàng)建并安裝自定義網(wǎng)絡驅動后甫何,您可以使用--driver
標志創(chuàng)建一個使用該驅動的網(wǎng)絡出吹。
$ docker network create --driver weave mynet
您可以檢查該網(wǎng)絡、讓容器連接或斷開該網(wǎng)絡辙喂,刪除該網(wǎng)絡趋箩。 特定的插件為特定的需求而生赃额。 檢查插件文檔的具體信息。 有關編寫插件的更多信息叫确,請參閱擴展Docker 以及 編寫網(wǎng)絡驅動程序插件 。
內嵌DNS服務器
Docker daemon運行一個嵌入式的DNS服務器芍锦,從而為連接到同一用戶自定義網(wǎng)絡的容器之間提供DNS解析——這樣竹勉,這些容器即可將容器名稱解析為IP地址。 如果內嵌DNS服務器無法解析請求娄琉,它將被轉發(fā)到為容器配置的任意外部DNS服務器次乓。 為了方便,當容器創(chuàng)建時孽水,只有127.0.0.11
可訪問的內嵌DNS服務器會列在容器的resolv.conf
文件中票腰。 有關在用戶自定義網(wǎng)絡的內嵌DNS服務器的更多信息,請參閱用戶定義網(wǎng)絡中的內嵌DNS服務器
暴露和發(fā)布端口
在Docker網(wǎng)絡中女气,有兩種不同的機制可以直接涉及網(wǎng)絡端口:暴露端口和發(fā)布端口杏慰。 這適用于默認網(wǎng)橋和用戶定義的網(wǎng)橋。
您使用
Dockerfile
中的EXPOSE
關鍵字或docker run
命令中的--expose
標志來暴露端口炼鞠。 暴露端口是記錄使用哪些端口缘滥,但實際上并不映射或打開任何端口的一種方式。 暴露端口是可選的谒主。-
您可以使用
Dockerfile
中的PUBLISH
關鍵字或docker run
命令中的--publish
標志來發(fā)布端口朝扼。 這告訴Docker在容器的網(wǎng)絡接口上打開哪些端口。當端口發(fā)布時霎肯,它將映射到宿主機上可用的高階端口(高于30000
)擎颖,除非您在運行時指定要映射到宿主機的哪個端口。 您不能在Dockerfile中指定要映射的端口观游,因為無法保證端口在運行image的宿主機上可用搂捧。此示例將容器中的端口80發(fā)布到宿主機上的隨機高階端口(在這種情況下為
32768
)。-d
標志使容器在后臺運行备典,因此您可以發(fā)出docker ps
命令异旧。$ docker run -it -d -p 80 nginx $ docker ps 64879472feea nginx "nginx -g 'daemon ..." 43 hours ago Up About a minute 443/tcp, 0.0.0.0:32768->80/tcp blissful_mclean
下一個示例指定80端口應映射到宿主機上的8080端口。 如果端口8080不可用提佣,將失敗吮蛹。
$ docker run -it -d -p 8080:80 nginx $ docker ps b9788c7adca3 nginx "nginx -g 'daemon ..." 43 hours ago Up 3 seconds 80/tcp, 443/tcp, 0.0.0.0:8080->80/tcp goofy_brahmagupta
容器與代理服務器
如果您的容器需要使用HTTP、HTTPS或者FTP代理拌屏,你可以使用如下兩種方式進行配置:
- 對于Docker 17.07或更高版本潮针,你可以配置Docker客戶端從而將代理信息自動傳遞給容器。
- 對于Docker 17.06或更低版本倚喂,你必須在容器內設置環(huán)境變量每篷。你可以在構建鏡像(這樣不太好移植)或啟動容器時執(zhí)行此操作瓣戚。
配置Docker客戶端
僅限Edge版本 :此選項僅適用于Docker CE Edge版本。 請參閱Docker CE Edge 焦读。
-
在Docker客戶端上子库,在啟動容器所使用的用戶的主目錄中創(chuàng)建或編輯
~/.config.json
文件。在其中添加如類似下所示的JSON矗晃,如果需要仑嗅,使用httpsproxy
或ftpproxy
替換代理類型,然后替換代理服務器的地址和端口张症。 您可以同時配置多個代理服務器仓技。您可以通過將
noProxy
鍵設置為一個或多個逗號分隔的IP地址或主機名來選擇將指定主機或指定范圍排除使用代理服務器。 支持使用*
字符作為通配符俗他,如此示例所示脖捻。{ "proxies": { "httpProxy": "http://127.0.0.1:3001", "noProxy": "*.test.example.com,.example2.com" } }
保存文件。
當您創(chuàng)建或啟動新容器時兆衅,環(huán)境變量將在容器內自動設置地沮。
手動設置環(huán)境變量
在構建映像時,或在創(chuàng)建或運行容器時使用--env
標志涯保,可將下表中的一個或多個變量設置為適當?shù)闹怠?這種方法使鏡像不太可移植诉濒,因此如果您使用Docker 17.07或更高版本,則應該配置Docker客戶端夕春。
變量 | Dockerfile示例 |
docker run 示例 |
|
---|---|---|---|
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)絡”功能之前,您可以使用Docker --link
功能來允許容器將另一個容器的名稱解析為IP地址及志,還可以訪問你所鏈接的容器的環(huán)境變量旧困。 如果可以盯捌,您應該避免使用 --link
標志。
當您創(chuàng)建連接時,當您使用默認bridge
或用戶自定義網(wǎng)橋時悄窃,它們的行為會有所不同辛辨。 有關詳細信息防泵,請參閱默認bridge
鏈接功能的遺留鏈接以及在用戶自定義網(wǎng)絡中鏈接容器的鏈接容器 脱盲。
Docker和iptables
Linux主機使用內核模塊iptables
來管理對網(wǎng)絡設備的訪問,包括路由每界,端口轉發(fā)捅僵,網(wǎng)絡地址轉換(NAT)等問題。 Docker會在啟動或停止發(fā)布端口的容器眨层、創(chuàng)建或修改網(wǎng)絡庙楚、attach到容器或其他與網(wǎng)絡相關的操作時修改iptables
規(guī)則。
對iptables
全面討論超出了本主題的范圍趴樱。 要查看哪個iptables
規(guī)則在任何時間生效馒闷,可以使用iptables -L
酪捡。 如存在多個表,例如nat
纳账, prerouting
或postrouting
逛薇,您可以使用諸如iptables -t nat -L
類的命令列出特定的表。 有關iptables
的完整文檔疏虫,請參閱netfilter / iptables 金刁。
通常, iptables
規(guī)則由初始化腳本或守護進程創(chuàng)建议薪,例如firewalld
。 規(guī)則在系統(tǒng)重新啟動時不會持久存在媳友,因此腳本或程序必須在系統(tǒng)引導時執(zhí)行斯议,通常在運行級別3或直接在網(wǎng)絡初始化之后運行。請參閱您的Linux發(fā)行版的網(wǎng)絡相關的文檔醇锚,了解如何使iptables
規(guī)則持續(xù)存在哼御。
Docker動態(tài)管理Docker daemon、容器焊唬,服務和網(wǎng)絡的iptables
規(guī)則恋昼。 在Docker 17.06及更高版本中,您可以向名為DOCKER-USER
的新表添加規(guī)則赶促,這些規(guī)則會在Docker自動創(chuàng)建任何規(guī)則之前加載液肌。 如果您需要在Docker運行之前預先設置需要使用的iptables
規(guī)則,這將非常有用鸥滨。
相關信息
- Work with network commands
- Get started with multi-host networking
- Managing Data in Containers
- Docker Machine overview
- Docker Swarm overview
- Investigate the LibNetwork project
本文首發(fā)
http://www.itmuch.com/docker/15-docker-network/