本文涉及的範圍是在乙個容器和其宿主機之間。
埠對映的主要目的是建立容器的某個埠和宿主機的某個埠之間的對映,對映建立之後可以使得宿主機相應的埠的流量**到容器的相應埠。要注意的一點是,如果容器有多個埠需要對映,那麼不能對映到宿主機的同乙個埠上。埠對映是在啟動容器的時候執行的,
docker run -p(小寫)
或者docker run -p(大寫)
1.1docker run -p(小寫)
後面的引數有四種格式,列舉如下:
可以通過命令docker port 容器名字或者id
檢視對映後的埠資訊,能夠看到容器的埠與宿主機的哪乙個埠建立了對映關係。
1.2docker run -p(大寫)
不需要額外的引數,其作用是將容器內部暴露所有的埠分別對映到宿主機的所有介面的乙個隨機埠上。例如,容器內部暴露80和443兩個埠,宿主機有192.168.0.1和192.168.0.2兩個介面位址,docker run -p(大寫)
會將80埠對映到192.168.0.1的2345(也可能是其他值)埠和192.168.0.2的2345埠上,將443埠對映到192.168.0.1的2346(也可能是其他值)埠和192.168.0.2的2346埠上。
首先言明,如果只進行埠暴露而不進行埠對映的話,那麼發往宿主機的流量是不會**到容器中的。埠暴露的常見場景是映象或者dockerfile檔案中自帶了乙個或一組暴露的埠,這麼做主要是提醒使用者,容器中的服務監聽了哪些埠。埠暴露還可以為其他的命令提供所需的資訊,也就是和其他的命令結合起來使用。埠暴露可以通過在dockerfile檔案中使用expose指令,也可以在docker run
命令啟動容器時使用--expose
選項。舉乙個埠暴露和埠對映結合使用的例子:
docker run -dit --name port_test --expose 80 --expose 443 -p nginx:latest
注意此處使用的是大寫的p,該命令的作用是拉取最新的nginx映象,並啟動乙個名為port_test的容器,然後容器暴露80和443兩個埠,分別對映到宿主機的所有介面的乙個隨機埠上。
docker 網路模式 和 埠對映
docker 自帶 3 種 網路模式 分別是bridge網路,host網路,none網路,可以使用 docker network ls 命令檢視。這種網路模式下容器只有lo回環網路,沒有其他網絡卡。none網路可以在容器建立時通過 network none 來指定。這種型別的網路沒有辦法聯網,封閉的...
埠對映和dmz
1 埠對映 在網路技術中,埠 port 有好幾種意思。集線器 交換機 路由器的埠指的是連線其他網路裝置的介面,如rj 45埠 serial埠等。我們這裡所說的埠,不是計算機硬體的i o埠,而是軟體形式上的概念。伺服器可以向外提供多種服務,比如,一台伺服器可以同時是web伺服器,也可以是ftp伺服器,...
網路埠對映的原理
有容器內外的埠對映,是怎麼做到的呢?這是要起乙個新的網路的 吧 啟動了docker之後,在docker上面還是有確實是有iptables的項,但是此時應該是有兩個網路的 吧,使用ip netns list是沒有看到的,也就是說其實是在乙個網路的 中的網路埠的對映 chain postrouting ...