沙箱參數會自動補上
多數 Linux 容器沒有可用的 setuid 沙箱。Chromium 會在偵錯埠繫結之前就結束,工作階段失敗而且看不出原因。 當 Extension.js 辨識出這種環境時,它會為 Chromium 的啟動補上--no-sandbox 與 --disable-setuid-sandbox。辨識條件是平台為 Linux,並且符合以下任一項:
CI變數的值為字串true。- 存在
/.dockerenv檔案,由 Docker 建立。 - 存在
/run/.containerenv檔案,由 Podman 建立。 REMOTE_CONTAINERS變數由 VS Code 設為true。CODESPACES變數由 GitHub Codespaces 設為true。container變數由數種 Linux 執行環境設定。
平台判斷也是條件的一部分。跑在 macOS 或 Windows
主機上的容器回報的平台不同,因此那裡不會補上這些參數。
browserFlags 設定項與 EXTENSION_BROWSER_FLAGS 變數請見瀏覽器參數。
把開發伺服器繫結到所有網路介面
開發伺服器預設繫結127.0.0.1,容器外的任何程序都連不到。傳入 --host 0.0.0.0 改為繫結所有網路介面:
127.0.0.1,在你把連接埠轉送到主機端時這是正確的值。ready.json 中的 host 欄位回報的就是這個可連線位址,而不是繫結位址。
當瀏覽器必須以別的名稱連到容器時,請明確傳入:
讓瀏覽器留在主機端
沒有顯示環境的容器無法啟動瀏覽器。用--no-browser 只啟動開發伺服器,然後在你自己的瀏覽器載入編譯產物:
dist/<browser>/,例如 dist/chromium/。在主機端把該目錄當成未封裝擴充功能載入。連接埠轉送完成後,重新載入仍會透過開發伺服器送達。
繫結掛載下的檔案監看
Extension.js 預設使用原生檔案系統事件監看,因為輪詢會喚醒 CPU 並拖慢重新載入。在擁有自己檔案系統的容器內,原生事件是可靠的。 會出問題的是來自 macOS 或 Windows 主機的繫結掛載。這類掛載常常漏掉事件,主機端的編輯到不了編譯器。這時請開啟輪詢:EXTENSION_WATCH_POLL_INTERVAL 設為另一個毫秒值。
容器工作階段檢查清單
- 把開發伺服器連接埠轉送到主機端。
- 以
--host 0.0.0.0啟動工作階段。 - 容器內沒有瀏覽器時加上
--no-browser。 - 編輯經由繫結掛載傳入時加上
EXTENSION_WATCH_POLL=true。
後續步驟
- 閱讀瀏覽器參數,了解 Extension.js 傳入的參數。
- 閱讀在 WSL 下開發擴充功能,了解 Windows 上的對應做法。
- 閱讀 CI 範本,了解建置伺服器上的無頭執行。

