文章目錄

AI Agent 很好用,但如果權限沒有控制好,很容易發生資訊安全、資料污染或遺失的問題。雖然目前大環境仍是在做技術探索,但再過好一陣子、技術要納入生產線時,資訊安全將會被重視,尤其是公司更要注意。
開發容器可以透過 VS Code 的 Dev Containers 延伸模組來實現,IntelliJ 也有類似的功能,有需求的也可以嘗試建建看。
這篇操作以 VS Code、Docker Desktop 與 Ubuntu 開發容器為範圍,並於 2026 年 9 月 1 日依 VS Code Dev Containers 官方文件 重新核對。Windows 需要先能正常啟動 WSL2 與 Docker Desktop;macOS 則要確認 Docker Desktop 已在執行,再開始建立容器。
安裝容器功能
我們會以 VS Code 來說明,請先安裝 Dev Containers 與 Remote Explorer 到 VS Code 中,再從左側遠端總管的開發容器中,點擊安裝 Docker,會開始自動下載 Docker Desktop 並安裝。

Docker Desktop 於 macOS 可以直接安裝使用,Windows 則要先啟用 WSL。完成安裝後,請啟動 Docker Desktop 與重啟 VS Code。

建立開發容器
接下來,我們可以拿現有的專案或新建一個專案來用於實驗這個開發容器,請從遠端總管的開發容器中,點擊開啟容器中的資料夾,選擇你的專案資料夾。

當我們選的專案沒有建立過開發容器,會跳出下圖的新增開發容器設定檔,請選擇將設定新增至工作區。

先選擇基底 Image,我習慣用 Ubuntu,該有的都有,很適合開發用。

版本使用預設值 resolute (Ubuntu 26.04)。

接著可以於容器中預先安裝好開發工具,省去自己操作的時間,未來也好遷移。我的專案是一個 Android APP,需要安裝 Android SDK。

我使用 Codex CLI 來開發,也能預先安裝好它。選擇好後再點擊確定,VS Code 將會開始下載與建置開發容器,會需要一段時間。

設定容器工具版本
容器建置好後 VS Code 會自動啟動與連線到開發容器中,由於 Android 專案對於各種元件的版本號碼很敏感,需要特別設定。
我可以瀏覽剛才選用 Android SDK 的 GitHub,能發現他有提供 platform、build_tools 的版本號碼欄位,因此可以編輯 .devcontainer/devcontainer.json,於 android-sdk 下加入版本設定。

設定完成後,再點擊左下角的開發容器: Ubuntu @ XXXX 按鈕,選擇重建容器,等待一段時間後 Android SDK 的版本就能與專案設定相同。

登入 Codex CLI
我們用開發容器的主要理由是要做好 Agent 的環境隔離,現在進入最後一哩路,請透過終端機輸入 codex 來啟動 Agent。

登入後,就可以輸入 /permissions 將權限改成 Full Access,把完整權限限制在容器可見的環境內;掛載進容器的專案與其他主機資料仍會受到影響。

確認容器真的可以工作
VS Code 左下角應顯示目前連線的開發容器,終端機執行 cat /etc/os-release 應看到所選的 Ubuntu 版本,輸入 codex 也要能進入登入後的 Session。Android 專案還可以執行既有的建置或版本檢查,確認 platform、build_tools 與專案需求一致;只看到容器成功啟動,還不能代表工具鏈已經完整。
Full Access 的隔離範圍也要看實際掛載內容。Agent 仍然能修改掛載進容器的專案、憑證、Socket 或其他目錄,所以不要把不需要的主機路徑一起掛進去,重要變更仍要交給 Git 保存。
建置失敗與回到本機
修改 .devcontainer/devcontainer.json 後沒有生效時,先執行「Dev Containers: Rebuild Container」。官方文件也提醒,直接在容器內手動安裝的套件會在重建後消失;需要保留的工具應寫進 Feature、Dockerfile 或 postCreateCommand。
容器若建置失敗,可從「Dev Containers: Show Container Log」查看失敗步驟,再選擇「Open Folder Locally」回到本機修改設定。若決定停用這套環境,只要先回到本機開啟專案,再移除不再需要的 .devcontainer 設定;原始碼是否保留仍以實際掛載位置與 Git 狀態為準。
總結
我的工作主力是 Codex,現在他的權限管理機制仍在快速迭代中,老實說現在的版本不怎麼好用,但給予完整權限又不安全。把開發環境放進容器後,我可以把工具鏈與主機隔開;真正要守住的邊界則是只掛載必要的專案與資料,並讓所有重要修改都能由 Git 復原。