在網絡方面,橋網是一種鏈路層設備,它能夠在網絡段之間傳輸流量。 橋能夠是硬件設備,也能夠是在主機前端
內核中運行的軟件設備。 就Docker而言,橋網使用的是一個軟件橋,它容許鏈接到同一橋網的容器進行通訊,同時提供與不鏈接到橋網的容器隔離。 Docker橋驅動程序自動地在主機上安裝規則,因此不一樣的橋接網絡上的容器不能直接通訊。web
橋接網絡適用於運行在相同的Docker守護進程主機上的容器。 對於運行在不一樣的Docker守護進程主機上的容器之間的通訊,您能夠在OS級別管理路由,也可使用覆蓋網絡。 當你開始Docker時,一個默認的橋網絡(也稱爲 bridge
)是自動建立的,新啓動的容器鏈接到它,除非有其餘指定。 您還能夠建立用戶定義的自定義橋網絡。 用戶定義的橋接網絡優於默認的橋接網絡。docker
鏈接到相同用戶定義的橋接網絡的容器會自動地將全部端口暴露在一塊兒,而對外部世界沒有端口。 這使得容器應用程序能夠輕鬆地進行通訊,而不會意外地打開外部世界的訪問。數據庫
假設有一個具備web前端和數據庫後端的應用程序。 外部世界須要訪問web前端(可能在端口80上),但只有前端自己須要訪問數據庫主機和端口。 使用用戶定義的橋,只須要打開web端口,而數據庫應用程序不須要打開任何端口,由於web前端能夠經過用戶定義的橋到達它。後端
若是您在默認的橋接網絡上運行相同的應用程序堆棧,則須要使用 -p
或 --publish
爲每一個應用程序堆棧打開web端口和數據庫端口。網絡
默認橋接網絡上的容器只能經過IP地址訪問,除非您使用 --link
選項,它被認爲是legacy。 在用戶定義的橋接網絡中,容器能夠經過名稱或別名彼此解析。spa
想象一下與前一個點相同的應用程序,有一個web前端和一個數據庫後端。 若是您調用您的容器web和db,那麼web容器能夠在db上鍊接到db容器,無論哪一個Docker主機正在運行應用程序堆棧。調試
若是您在默認的橋接網絡上運行相同的應用程序堆棧,您須要手動建立容器之間的連接(使用legacy -link)標誌。 這些連接須要在兩個方向上建立,所以您能夠看到,兩個以上的容器須要進行通訊時,這一過程變得複雜。 或者,您能夠在容器中操做 /etc/hosts
文件,可是這會形成難以調試的問題。code
在容器的生命週期中,您能夠動態地鏈接或斷開用戶定義的網絡。 要從默認的橋接網絡中刪除一個容器,您須要中止容器並使用不一樣的網絡選項從新建立它。生命週期