很多的時候和環境下,都只有主機可以取到一組對外的 IP 位址,因此,就不適合使用前面提到的第一方式,因此,就得透過 Port Forwarding 的方式來達到讓 Container 可以對外的效果,而主機要能夠執行 Port Forwarding 的功能,其實,就是透過 iptables 程式來達成的哩 !
以阿舍要把主機的 eth0 這張網卡的 80 埠轉到 10.0.3.211 這個 Container 的 8088 埠為例,那麼 iptables 的指令就會像下面這樣,雖然,看起來有點長和複雜,但是,請不用花時間去瞭解這些選項們,只要知道要改那幾項參數就可以了哩 !
# sudo iptables -t nat -A PREROUTING -i [網卡名稱] -p [通訊協定] --dport [主機埠號] -j DNAT --to [Container IP 位址]:[Container 埠號]
$ sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.0.3.211:8088
上面的指令執行完成後,就可以執行下面這一行指令來確認一下設定是否有成功,如果有的話,下面這行指令執行後,應該就會多看到一行目的是 Container 的 IP 位址的規則哩 !
$ sudo iptables -t nat -L
不過,這樣的設定是暫時的,也就是說,當機器重開機之後,這條 Forwarding 的規則就會消失殆盡哩! 所以,如果這條規則不是暫時性的話,那就是要執行幾個步驟來把它保存並在每次開機時能重新讀入,首先,請執行下面這行指令來把目前已經新增好轉埠的規則存起來。
$ sudo -sh -c "iptables-save > /etc/iptables.rules"
執行完成後,接下來,請打開 /etc/network/interfaces 這個檔案,然後,在 eth0 網卡的設定項目的最下面加入下面這一行之後存檔 (如果你的網卡不是 eth0 的話,就要改放到你的真正使用的網卡的名稱的下面),這樣,當網卡啟動後,就會去把 /etc/iptables.rules 的規則檔給讀進來,就不用每次都要設定哩 !
pre-up iptables-restore < /etc/iptables.rules
不過,不用時,也要記得到 /etc/network/interfaces 檔來把它給移除哩 ! ...
推薦閱讀
- 問題沒解決嗎? 更多的 Ubuntu 教學在 這裡
- Prompt Injection: 提示詞注入安全漏洞
- 二款 Mac 無痛安裝的 Stable Diffusion 軟體
- 用 AI 寫部落格文章好不好 ?
- 沒有免費的 Midjourney 和 Colab 又不想花錢怎麼辦 ?
- 不學 Prompt 技巧也能善用 ChatGPT 的簡單方法
- 企業 AI 應用:不只是聊天機器人
- Automatic 比 Automatic1111 更好用 ? 都是 Stable Diffusion WebUI
- Stable Diffusion 的 /describe 圖生文功能
- AI 畫出讓人可怖的美圖 !
有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁
沒有留言 :
張貼留言
歡迎留言提問和討論 .... 😁