連接埠
在範本上宣告一個連接埠,Superheat 就會在執行個體啟動時發布它,把容器連接埠對應到你租用的機器上的某個主機連接埠。你的工作負載上任何想從外部連到的接聽位置 —— 推論伺服器、網頁介面、指標端點 —— 都需要在這裡有一列。
宣告連接埠
連接埠 區段中的每一列有四個部分。
| 部分 | 可接受的內容 | 意義 |
|---|---|---|
| 容器連接埠 | 1 到 65535 | 你的程序在容器 內部 接聽的連接埠。 |
| 通訊協定 | tcp、udp、http、https | 該連接埠提供什麼服務。http 與 https 都以 TCP 發布;這個區別是用來記錄意圖,也決定主控台如何呈現該連接埠。 |
| 標籤 | 最多 64 個字元 | 給人看的名稱,顯示在範本詳細資料上。有些值是保留的 —— 見下文。 |
| 公開 | 開關,預設為開啟 | 記錄在連接埠項目上。 |
你只宣告 容器 連接埠。主機連接埠會在啟動時從機器已發布的範圍中指派,你事先不會知道它是多少。在容器內,每個已發布的 TCP 連接埠都可以透過 SUPERHEAT_TCP_PORT_<container_port> 取得:
echo "$SUPERHEAT_TCP_PORT_7860"
這個環境變數就是你從工作負載內部讀取主機連接埠的方式。執行個體頁面的 連線 分頁會呈現 SSH 命令,若範本有設定,也會呈現 開啟 或 開啟 JupyterLab 連結。請參閱連接埠與網路。
標籤
標籤會去除前後空白並在比對時不分大小寫,其中有六個會對應到四種保留角色。
| 標籤 | 作用 |
|---|---|
open、open_button、open-button | 讓這個連接埠成為 開啟 按鈕的目標。該連接埠會以 open_button 角色發布,埠號會以 OPEN_BUTTON_PORT 傳給容器。 |
ssh | 以 ssh 角色發布。 |
jupyter | 以 jupyter 角色發布。 |
app | 以 app 角色發布 —— 這是預設值。 |
| 其他任何值 | 保留為顯示標籤;該連接埠會以 app 角色發布。 |
所以標籤為 Jupyter、jupyter 或 JUPYTER 的連接埠意思完全相同,而 Gradio UI 只是一個帶著好記名稱的普通 app 連接埠。
你不用宣告的連接埠
啟動模式會前置加入它們需要的連接埠。在 ssh 模式下,容器連接埠 22 會替你加上。在 jupyter 模式下,22 與 8080 都會加上。自己宣告它們無害但多餘:清單會依容器連接埠與通訊協定去除重複,隱含項目會勝過普通的 app 項目。
優先順序由高到低是 ssh 與 jupyter,接著是 open_button,然後是 app。這就是為什麼範本可以同時在清單中宣告某個連接埠,又把開啟按鈕指向它 —— 存留下來的項目會帶著 open_button 角色。
在 args 模式下不會前置加入任何東西。如果你想以 SSH 連到 args 範本,就得自己負責在映像檔中執行 SSH 伺服器並自行宣告連接埠,或者改用 ssh 模式搭配衍生自基礎映像檔的映像檔。
開啟按鈕的連接埠
當範本指定了目標連接埠時,主控台會在執行個體上顯示 開啟 按鈕。設定方式是把剛好一個連接埠標籤為 open:
{
"ports": [
{ "container_port": 7860, "protocol": "http", "label": "open", "public": true },
{ "container_port": 9090, "protocol": "http", "label": "metrics", "public": true }
]
}
若把多個連接埠都標籤為 open,清單中最後一個會勝出,而那通常不是你的本意。請只宣告一個。
在 jupyter 模式下你根本不需要開啟按鈕的連接埠 —— 主控台會依據 Jupyter 角色呈現 開啟 JupyterLab,網址中已經帶著存取權杖。請參閱 JupyterLab。
連接埠是配方的一部分
連接埠清單是啟動欄位,所以編輯它會重新產生範本的 hash_id,並使釘選的分享連結失效。執行中的執行個體會保有啟動當下的連接埠對應;新的連接埠只會出現在編輯之後才部署的執行個體上。