強化型容器隔離常見問題

啟用 ECI 時,我是否需要改變使用 Docker 的方式?

不需要,您可以繼續照常使用 Docker。ECI 會在幕後運作,建立更安全的容器。

所有容器工作負載都能與 ECI 良好運作嗎?

絕大多數的容器工作負載在啟用 ECI 的情況下都能正常執行,但有些則不行(目前)。針對少數尚未與強化型容器隔離相容的工作負載,Docker 正持續改進此功能,將其降至最低。

我可以使用 ECI 執行具備權限的容器嗎?

可以,您可以在容器中使用 --privileged 旗標,但與沒有 ECI 的具備權限容器不同,容器只能使用其提升的權限來存取指派給容器的資源。它無法存取 Docker Desktop Linux VM 中的全域核心資源。這讓您可以安全地執行具備權限的容器(包括 Docker-in-Docker)。如需詳細資訊,請參閱 主要功能和優點

所有具備權限的容器工作負載都能與 ECI 執行嗎?

不行。想要存取 Docker Desktop Linux VM 內全域核心資源的具備權限容器工作負載將無法運作。例如,您無法使用具備權限的容器來載入核心模組。

為何不只是限制 --privileged 旗標的使用?

具備權限的容器通常用於在容器中執行進階工作負載,例如 Docker-in-Docker 或 Kubernetes-in-Docker,以執行核心操作(例如載入模組)或存取硬體裝置。

ECI 允許執行進階工作負載,但不允許執行核心操作或存取硬體裝置。

ECI 是否會限制容器內的繫結掛載?

會,它會限制將 Docker Desktop Linux VM 中的目錄繫結掛載到容器中。

它不會限制將主機電腦檔案繫結掛載到容器中,如同透過 Docker Desktop 的 **設定** > **資源** > **檔案共用** 所設定。

啟用 ECI 時,我可以將主機的 Docker Socket 掛載到容器中嗎?

基於安全考量,預設情況下,ECI 會封鎖將主機的 Docker Socket 繫結掛載到容器中。但是,有一些合法的使用案例,例如使用 TestcontainersECI Docker Socket 掛載權限

ECI 是否會保護所有使用 Docker Desktop 啟動的容器?

尚未。它會保護使用者透過 docker createdocker run 啟動的所有容器。

在 Docker Desktop 4.30 之前的版本中,使用 docker 建置驅動程式(預設驅動程式)時,docker build 隱式使用的容器不會受到保護。從 Docker Desktop 4.30 開始,除了在 WSL 2 上的 Docker Desktop(Windows 主機)之外,它會保護此類容器。

請注意,自 Docker Desktop 4.19 起,在所有支援的平台(使用 WSL 2 或 Hyper-V 的 Windows、Mac 和 Linux)上,當使用docker-container 建置驅動程式時,ECI 一直都會保護 docker build 使用的容器。

ECI 目前尚未保護 Docker Desktop Kubernetes Pod、擴充容器和開發環境容器

ECI 是否會保護在啟用 ECI 之前啟動的容器?

否。在開啟 ECI 之前建立的容器不受保護。因此,建議您在開啟 ECI 之前移除所有容器。

ECI 是否會影響容器的效能?

ECI 對容器的效能影響很小。例外情況是執行大量 mountumount 系統呼叫的容器,因為 Sysbox 容器執行階段會攔截並審核這些呼叫,以確保它們不會被用於破壞容器的檔案系統。

使用 ECI 時,使用者是否仍然可以從 CLI 覆寫 --runtime 旗標?

否。啟用 ECI 後,Sysbox 會被設定為 Docker Desktop 使用者部署的容器的預設(且唯一)執行階段。如果使用者嘗試覆蓋執行階段(例如,docker run --runtime=runc),此請求將被忽略,並且容器將透過 Sysbox 執行階段建立。

不允許使用 runc 的原因是它允許使用者以「真正 root」身分在 Docker Desktop Linux 虛擬機器上執行,從而讓他們能夠隱式控制虛擬機器並修改 Docker Desktop 的管理設定。

ECI 與 Docker Engine 的 userns-remap 模式有何不同?

請參閱其運作方式

ECI 與 Rootless Docker 有何不同?

請參閱其運作方式