先說讓container可以讓internet ip看到,不是很簡單的事情,而這也是一切撰寫這次鐵人賽的起點,試過幾個偏方,雖然好像可以,但管理上又有點怪,所以在討論之前,想先就docker的五大網路架構說明一下。
之前有講解過固定IP,可以用來讓container之間互連,還有一種是在-p的時候,bind ip,就可以讓該container只有經由該指定的ip:port連線。
實做時有發現一個現象。
我們來看環境:
nmcli show
wlan:我的無線網卡,然後我是用iTaiwan
docker0:安裝docker會預設建立的bridge虛擬網卡
br1:我使用brctl addbr新增的虛擬網卡
這邊只能研判itaiwan有做一些ip轉換,網卡取得的ip外面看不到,實際上會再NAT另一個IP。
所以這邊嘗試bind 無線網卡,嘗試當wan ip的作法是失敗的,研判可能是itaiwan的限制。
筆電我只能取得192.168.x.x這種ip,一樣無法用在wan ip,手機也無法做port forwarding這類的複雜設定。
另外-p bind ip有個限制,就是必須bind的ip存在於ifconfig看到的網卡,如果沒有網卡是這個ip,bind就會失敗:
看起來如果真要玩WAN IP容器服務,在我無法控制前面的網路設備的前提,有種方式就是以下設定好,然後使用WAN IP(以下wan ip都是假的):
docker network create
--driver=bridge
--subnet=8.8.0.0/16
--ip-range=8.8.8.2/32
--gateway=8.8.8.1
br0
當然還有一種前提,就是要實際的讓網卡拿得到WAN IP(如範例是8.8.8.1),這樣這張網卡才能當橋接網卡的GW。
以上是我的猜測,也是我目前測試實際環境中所使用的方式,限制就是這個WAN IP必須跟網卡同網段。