如何工作?
Docker 透過使用 Sysbox 容器執行時 實現增強容器隔離。Sysbox 是標準 OCI runc 執行時的分支,經過修改以增強標準容器隔離和工作負載。有關更多詳細資訊,請參閱幕後原理。
啟用增強容器隔離後,使用者透過 docker run
或 docker create
建立的容器將自動使用 Sysbox 啟動,而不是標準 OCI runc 執行時。使用者無需執行其他操作,可以像往常一樣繼續使用容器。例外情況請參閱常見問題解答。
即使是使用不安全的 --privileged
標誌的容器,現在也可以透過增強容器隔離安全執行,這樣它們就不能再用於破壞 Docker Desktop 虛擬機器 (VM) 或其他容器。
注意
在 Docker Desktop 中啟用增強容器隔離後,Docker CLI 的
--runtime
標誌將被忽略。Docker 的預設執行時仍然是runc
,但所有使用者容器都會隱式地透過 Sysbox 啟動。
增強容器隔離與Docker Engine 的 userns-remap 模式或 Rootless Docker 不同。
幕後原理
Sysbox 透過使用以下技術增強容器隔離:
- 在所有容器上啟用 Linux 使用者名稱空間(容器中的 root 使用者對映到 Linux VM 中的非特權使用者)。
- 限制容器掛載敏感的 VM 目錄。
- 審查容器和 Linux 核心之間的敏感系統呼叫。
- 在容器的使用者名稱空間和 Linux VM 之間對映檔案系統使用者/組 ID。
- 在容器內部模擬部分
/proc
和/sys
檔案系統。
其中一些得益於 Linux 核心的最新進展,Docker Desktop 現已整合這些進展。Sysbox 應用這些技術對容器的功能或效能影響最小。
這些技術補充了 Docker 傳統的容器安全機制,例如使用其他 Linux 名稱空間、cgroups、受限 Linux Capabilities、Seccomp 和 AppArmor。它們在容器和 Docker Desktop VM 內部的 Linux 核心之間增加了強大的隔離層。
有關更多資訊,請參閱主要特性和優勢。
增強容器隔離與使用者名稱空間重對映的比較
Docker Engine 包含一個名為userns-remap 模式的功能,可以在所有容器中啟用使用者名稱空間。但它存在一些限制,並且在 Docker Desktop 中不受支援。
Userns-remap 模式與增強容器隔離類似,兩者都透過利用 Linux 使用者名稱空間來改善容器隔離。
然而,增強容器隔離更為先進,因為它會自動為每個容器分配獨佔的使用者名稱空間對映,並增加了其他一些旨在為具有嚴格安全要求的組織加固 Docker Desktop 的容器隔離功能。
增強容器隔離與 Rootless Docker 的比較
Rootless Docker 允許 Docker Engine 以及擴充套件的容器在 Linux 主機上原生無 root 許可權執行。這使得非 root 使用者可以在 Linux 上原生安裝和執行 Docker。
Docker Desktop 中不支援 Rootless Docker。儘管它在 Linux 上原生執行 Docker 時是一個有價值的功能,但其在 Docker Desktop 中的價值有所降低,因為 Docker Desktop 在 Linux VM 中執行 Docker Engine。也就是說,Docker Desktop 已經允許非 root 主機使用者執行 Docker,並使用虛擬機器將 Docker Engine 與主機隔離開來。
與 Rootless Docker 不同,增強容器隔離不在 Linux 使用者名稱空間內執行 Docker Engine。它是在使用者名稱空間內執行由該 Engine 生成的容器。這樣做的好處是繞過了 Rootless Docker 的限制,並在容器和 Docker Engine 之間建立了更強的邊界。
增強容器隔離旨在確保透過 Docker Desktop 啟動的容器不易突破 Docker Desktop Linux VM,從而無法修改其中的安全設定。