Docker系列教程15-Docker容器網(wǎng)絡

本文是篇翻譯。原文: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 showifconfig 命令可能會展示結果,但會給你本地主機的IP地址信息累澡,而不是Docker容器網(wǎng)絡梦抢。 這是因為Docker使用虛擬機中運行的網(wǎng)卡,而并非在宿主機的網(wǎng)卡永乌。

要使用ip addr showifconfig命令瀏覽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中参淫,nonehost 網(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)絡隔離開來辛掠。

image

在用戶定義的橋接網(wǎng)絡中,不支持鏈接(link)释牺。 您可以在此網(wǎng)絡中的容器上暴露和發(fā)布容器端口 萝衩。 如果您希望使一部分bridge 網(wǎng)絡可用于外部網(wǎng)絡,這將非常有用没咙。

image

如果您希望在單個主機上運行相對較小的網(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 焦读。

  1. 在Docker客戶端上子库,在啟動容器所使用的用戶的主目錄中創(chuàng)建或編輯~/.config.json 文件。在其中添加如類似下所示的JSON矗晃,如果需要仑嗅,使用httpsproxyftpproxy 替換代理類型,然后替換代理服務器的地址和端口张症。 您可以同時配置多個代理服務器仓技。

    您可以通過將noProxy 鍵設置為一個或多個逗號分隔的IP地址或主機名來選擇將指定主機或指定范圍排除使用代理服務器。 支持使用*字符作為通配符俗他,如此示例所示脖捻。

    {
      "proxies":
      {
        "httpProxy": "http://127.0.0.1:3001",
        "noProxy": "*.test.example.com,.example2.com"
      }
    }
    

    保存文件。

  2. 當您創(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 纳账, preroutingpostrouting 逛薇,您可以使用諸如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ī)則,這將非常有用鸥滨。

相關信息

本文首發(fā)

http://www.itmuch.com/docker/15-docker-network/

干貨分享

全是干貨
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末嗦哆,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子婿滓,更是在濱河造成了極大的恐慌老速,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凸主,死亡現(xiàn)場離奇詭異橘券,居然都是意外死亡,警方通過查閱死者的電腦和手機卿吐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門旁舰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人但两,你說我怎么就攤上這事鬓梅。” “怎么了谨湘?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵绽快,是天一觀的道長芥丧。 經常有香客問我,道長坊罢,這世上最難降的妖魔是什么续担? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮活孩,結果婚禮上物遇,老公的妹妹穿的比我還像新娘。我一直安慰自己憾儒,他們只是感情好询兴,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著起趾,像睡著了一般诗舰。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上训裆,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天眶根,我揣著相機與錄音,去河邊找鬼边琉。 笑死属百,一個胖子當著我的面吹牛,可吹牛的內容都是我干的变姨。 我是一名探鬼主播族扰,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼钳恕!你這毒婦竟也來了别伏?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤忧额,失蹤者是張志新(化名)和其女友劉穎厘肮,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體睦番,經...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡类茂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了托嚣。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巩检。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖示启,靈堂內的尸體忽然破棺而出兢哭,到底是詐尸還是另有隱情,我是刑警寧澤夫嗓,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布迟螺,位于F島的核電站冲秽,受9級特大地震影響,放射性物質發(fā)生泄漏矩父。R本人自食惡果不足惜锉桑,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望窍株。 院中可真熱鬧民轴,春花似錦、人聲如沸球订。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冒滩。三九已至轻抱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間旦部,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工较店, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留士八,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓梁呈,卻偏偏與公主長得像婚度,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子官卡,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內容

  • 概述 自從docker容器出現(xiàn)以來蝗茁,容器的網(wǎng)絡通信就一直是大家關注的焦點,也是生產環(huán)境的迫切需求寻咒。而容器的網(wǎng)絡通信...
    糙老爺們兒吃什么櫻桃閱讀 3,625評論 1 5
  • 一 哮翘、什么是 Docker Docker 最初是 dotCloud 公司創(chuàng)始人 Solomon Hykes 在法國...
    Blazzer閱讀 3,140評論 0 13
  • V5峰閱讀 103評論 0 0
  • 《紅樓夢》在我的心里一直占有很重要的位置。有一段時間我覺得“開卷不提紅樓夢毛秘,讀盡詩書也枉然”饭寺。有一段時間我瘋狂的看...
    走過灰白閱讀 294評論 0 2
  • 為什么起這個名字呢? 2017.7.4號叫挟,貌似我真的是半個月就會出現(xiàn)這樣一次的情況艰匙,但這次與前幾次的排斥你卻不同。...
    涼城7度閱讀 240評論 0 0