增強型容器隔離 (ECI) 常見問題解答
啟用 ECI 後,我是否需要更改使用 Docker 的方式?
不需要,您可以繼續像往常一樣使用 Docker。ECI 在後臺執行,建立一個更安全的容器。
所有容器工作負載都能與 ECI 良好地配合使用嗎?
絕大多數容器工作負載可以在啟用 ECI 的情況下正常執行,但少數工作負載不能(尚未)。對於那些尚未與增強型容器隔離配合使用的少數工作負載,Docker 正在繼續改進此功能,以最大程度地減少這種情況。
我可以在 ECI 中執行特權容器嗎?
是的,您可以在容器中使用 --privileged
標誌,但與沒有 ECI 的特權容器不同,該容器只能使用其提升的特權訪問分配給該容器的資源。它無法訪問 Docker Desktop Linux 虛擬機器中的全域性核心資源。這使您可以安全地執行特權容器(包括 Docker-in-Docker)。有關更多資訊,請參見 主要功能和優勢。
所有特權容器工作負載都可以在 ECI 中執行嗎?
不能。希望訪問 Docker Desktop Linux 虛擬機器中的全域性核心資源的特權容器工作負載將無法執行。例如,您無法使用特權容器載入核心模組。
為什麼不直接限制 --privileged
標誌的使用?
特權容器通常用於在容器中執行高階工作負載,例如 Docker-in-Docker 或 Kubernetes-in-Docker,執行核心操作(如載入模組)或訪問硬體裝置。
ECI 允許執行高階工作負載,但拒絕執行核心操作或訪問硬體裝置的能力。
ECI 是否會限制容器內的繫結掛載?
是的,它會限制將位於 Docker Desktop Linux 虛擬機器中的目錄繫結掛載到容器中。
它不會限制將您的主機檔案繫結掛載到容器中,如透過 Docker Desktop 的 **設定** > **資源** > **檔案共享** 配置的那樣。
啟用 ECI 後,我是否可以將主機的 Docker 套接字掛載到容器中?
預設情況下,ECI 會出於安全原因阻止將主機的 Docker 套接字繫結掛載到容器中。但是,此操作有一些合法用例,例如使用 Testcontainers 進行本地測試。
為了支援此類用例,可以配置 ECI 允許將 Docker 套接字掛載到容器中,但這僅限於您選擇的(即,受信任的)容器映象,甚至可以限制容器可以透過套接字傳送到 Docker 引擎的命令。請參見 ECI Docker 套接字掛載許可權。
ECI 是否會保護所有使用 Docker Desktop 啟動的容器?
尚未。它會保護使用者透過 docker create
和 docker run
啟動的所有容器。
在 Docker Desktop 4.30 之前,它不會隱式地保護由 docker build
與 docker
構建驅動程式(預設驅動程式)一起使用的容器。從 Docker Desktop 4.30 開始,它會保護此類容器,但 Docker Desktop 在 WSL 2(Windows 主機)上除外。
請注意,自 Docker Desktop 4.19 起,在所有受支援的平臺(帶有 WSL 2 或 Hyper-V 的 Windows、Mac 和 Linux)上,ECI 始終會保護使用 docker-container 構建驅動程式 的 docker build
使用的容器。
ECI 尚未保護 Docker Desktop Kubernetes Pod、擴充套件容器和 開發環境容器。
ECI 是否會保護在啟用 ECI 之前啟動的容器?
不會。在啟用 ECI 之前建立的容器不受保護。因此,我們建議在啟用 ECI 之前刪除所有容器。
ECI 是否會影響容器的效能?
ECI 對容器的效能影響很小。唯一的例外是執行大量 mount
和 umount
系統呼叫的容器,因為這些呼叫會被 Sysbox 容器執行時捕獲和驗證,以確保它們不被用於破壞容器的檔案系統。
使用 ECI 後,使用者是否仍可以從 CLI 覆蓋 --runtime
標誌?
不會。啟用 ECI 後,Sysbox 會被設定為 Docker Desktop 使用者部署容器的預設(也是唯一的)執行時。如果使用者嘗試覆蓋執行時(例如,docker run --runtime=runc
),則會忽略此請求,並且容器將透過 Sysbox 執行時建立。
之所以在 ECI 中停用 runc
,是因為它允許使用者以“真實 root”身份在 Docker Desktop Linux 虛擬機器中執行,從而為他們提供對虛擬機器的隱式控制權,以及修改 Docker Desktop 管理配置的能力,例如。
ECI 與 Docker Engine 的 userns-remap 模式有何不同?
請參見 工作原理。
ECI 與無根 Docker 有何不同?
請參見 工作原理