強化型容器隔離常見問題
啟用 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 繫結掛載到容器中。但是,有一些合法的使用案例,例如使用 Testcontainers。
ECI 是否會保護所有使用 Docker Desktop 啟動的容器?
尚未。它會保護使用者透過 docker create
和 docker 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 對容器的效能影響很小。例外情況是執行大量 mount
和 umount
系統呼叫的容器,因為 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 有何不同?
請參閱其運作方式