增強容器隔離常見問題

目錄

開啟 ECI 後,我需要改變使用 Docker 的方式嗎?

不需要,你可以繼續照常使用 Docker。ECI 透過建立一個更安全的容器在底層工作。

所有容器工作負載都能很好地與 ECI 配合使用嗎?

絕大多數容器工作負載在啟用 ECI 後執行良好,但少數目前不能(尚未)。對於少數暫不支援增強容器隔離的工作負載,Docker 正在持續改進此功能,以將其降至最低。

我可以在啟用 ECI 的情況下執行特權容器嗎?

是的,你可以在容器中使用 --privileged 標誌,但與未啟用 ECI 的特權容器不同,啟用 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 的 Settings > Resources > File Sharing 中配置。

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

預設情況下,出於安全原因,ECI 會阻止將主機的 Docker socket 繫結掛載到容器中。但是,這也有合理的用例,例如在使用 Testcontainers 進行本地測試時。

為了支援此類用例,可以配置 ECI 允許將 Docker socket 掛載到容器中,但僅限於你選擇的(即受信任的)容器映象,並且甚至可以限制容器透過 socket 傳送給 Docker Engine 的命令。請參閱ECI Docker socket 掛載許可權

ECI 會保護所有透過 Docker Desktop 啟動的容器嗎?

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

對於 docker build 隱式建立的容器以及 Docker Desktop 整合的 Kubernetes,保護級別因 Docker Desktop 版本而異(請參閱以下兩個常見問題)。

ECI 尚未保護 Docker Desktop 擴充套件容器和開發環境容器

ECI 是否保護 docker build 隱式使用的容器?

在 Docker Desktop 4.19 之前,ECI 不保護在構建過程中 docker build 隱式使用的容器。

自 Docker Desktop 4.19 起,ECI 在使用Docker 容器驅動時會保護 docker build 使用的容器。

此外,自 Docker Desktop 4.30 起,ECI 在使用預設的 "docker" 構建驅動時也會保護 docker build 使用的容器,但在 Windows with WSL 2 平臺上除外。

ECI 是否保護 Docker Desktop 中的 Kubernetes?

在 Docker Desktop 4.38 之前,ECI 不保護 Docker Desktop 中整合的 Kubernetes 叢集。

自 Docker Desktop 4.38 起,ECI 在使用新的 kind provisioner 時會保護整合的 Kubernetes 叢集(請參閱在 Kubernetes 上部署)。在這種情況下,多節點 Kubernetes 叢集中的每個節點實際上都是一個受 ECI 保護的容器。如果停用 ECI,Kubernetes 叢集中的每個節點都是一個安全性較低的完全特權容器。

ECI 在使用舊的 Kubeadm 單節點叢集 provisioner 時不保護整合的 Kubernetes 叢集。

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

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

ECI 是否影響容器的效能?

ECI 對容器效能影響很小。例外情況是那些執行大量 mountumount 系統呼叫的容器,因為 Sysbox 容器執行時會捕獲並審查這些呼叫,以確保它們沒有被用於破壞容器的檔案系統。

啟用 ECI 後,使用者仍然可以從 CLI 覆蓋 --runtime 標誌嗎?

不能。啟用 ECI 後,Sysbox 被設定為 Docker Desktop 使用者部署容器的預設(也是唯一)執行時。如果使用者試圖覆蓋執行時(例如,docker run --runtime=runc),此請求將被忽略,容器將透過 Sysbox 執行時建立。

禁止使用 runc 的原因在於它允許使用者在 Docker Desktop Linux VM 上以“真正的 root”身份執行,從而讓他們隱式控制 VM 並修改 Docker Desktop 的管理配置。

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

請參閱工作原理

ECI 與 Rootless Docker 有何不同?

請參閱工作原理

頁面選項