增強型容器隔離 (ECI) 常見問題
本頁面解答了關於增強型容器隔離 (ECI) 的常見問題,這些問題未包含在主要說明文件中。
開啟 ECI 時,我需要改變使用 Docker 的方式嗎?
不需要。ECI 會透過建立更安全的容器,在背景自動運作。您可以繼續使用所有現有的 Docker 指令、工作流程及開發工具,無需進行任何變更。
所有容器工作負載都能在 ECI 下正常運作嗎?
大多數容器工作負載在開啟 ECI 後均能正常運作。不過,某些需要特定核心層級存取權限的進階工作負載可能無法運作。關於哪些工作負載會受影響的詳細資訊,請參閱 ECI 限制。
為什麼不直接限制 --privileged 旗標的使用就好?
特權容器 (Privileged containers) 有其合理用途,例如 Docker-in-Docker、Kubernetes-in-Docker 以及存取硬體裝置。ECI 提供了解決方案,允許這些進階工作負載安全地執行,同時防止它們危及 Docker Desktop VM 的安全。
ECI 會影響容器效能嗎?
ECI 對容器效能的影響微乎其微。唯一的例外是執行大量 mount 和 umount 系統呼叫的容器,因為 Sysbox 執行階段會檢查這些呼叫以確保安全性。大多數開發工作負載不會感覺到明顯的效能差異。
在開啟 ECI 的情況下,我可以覆寫容器執行階段嗎?
不行。當 ECI 開啟時,無論使用任何 --runtime 旗標,所有容器都會使用 Sysbox 執行階段。
$ docker run --runtime=runc alpine echo "test"
# This still uses sysbox-runc, not runc
系統會忽略 --runtime 旗標,以防止使用者透過以真實 root 身分在 Docker Desktop VM 中執行容器來規避 ECI 安全機制。
ECI 能保護在開啟功能前建立的容器嗎?
不行。ECI 僅保護在該功能開啟後建立的容器。在開啟 ECI 之前,請先移除現有的容器。
$ docker stop $(docker ps -q)
$ docker rm $(docker ps -aq)
欲知更多詳情,請參閱 啟用增強型容器隔離。
ECI 可以保護哪些容器?
ECI 的保護範圍會根據容器類型和 Docker Desktop 版本而異。
隨時受保護
- 使用
docker run和docker create建立的容器 - 使用
docker-container建置驅動程式的容器
取決於版本
- Docker Build:在 Docker Desktop 4.30+ 版本中受保護(WSL 2 除外)
- Kubernetes:在 Docker Desktop 4.38+ 版本中使用 kind 提供者時受保護
不受保護
- Docker 擴充功能
- Docker Debug 容器
- 使用 Kubeadm 提供者的 Kubernetes
欲了解完整詳情,請參閱 ECI 限制。
開啟 ECI 後,我可以掛載 Docker socket 嗎?
預設情況下,不行。出於安全考量,ECI 會封鎖 Docker socket 的綁定掛載。不過,您可以針對像 Testcontainers 這樣的受信任映像檔設定例外狀況。
關於設定細節,請參閱 設定 Docker socket 例外狀況。
ECI 限制了哪些綁定掛載 (bind mounts)?
ECI 會限制對 Docker Desktop VM 目錄的綁定掛載,但允許在 Docker Desktop 設定中配置的主機目錄掛載。