啟用增強容器隔離

訂閱: 商業版
適用於: 管理員

ECI 可防止惡意容器危及 Docker Desktop,同時保持開發者生產力。

本頁向您展示如何啟用增強容器隔離 (ECI) 並驗證其是否正常工作。

先決條件

在開始之前,您必須擁有

  • Docker Business 訂閱
  • Docker Desktop 4.13 或更高版本
  • 強制登入(僅限管理組織範圍設定的管理員)

啟用增強容器隔離

對於開發者

在 Docker Desktop 設定中啟用 ECI

  1. 登入到 Docker Desktop 中的組織。您的組織必須擁有 Docker Business 訂閱。

  2. 停止並移除所有現有容器

    $ docker stop $(docker ps -q)
    $ docker rm $(docker ps -aq)
    
  3. 在 Docker Desktop 中,轉到設定 > 通用

  4. 選擇使用增強容器隔離複選框。

  5. 選擇應用並重啟

重要

ECI 不保護在啟用該功能之前建立的容器。在啟用 ECI 之前請移除現有容器。

對於管理員

使用設定管理在組織範圍內配置增強容器隔離

  1. 登入 Docker Home 並選擇您的組織。
  2. 轉到管理控制檯 > 桌面設定管理
  3. 建立或編輯設定策略.
  4. 增強容器隔離設定為始終啟用
  1. 建立 admin-settings.json 檔案並新增

    {
      "configurationFileVersion": 2,
      "enhancedContainerIsolation": {
        "value": true,
        "locked": true
      }
    }
  2. 根據需要配置以下內容

    • "value": true:預設啟用 ECI(必需)
    • "locked": true:防止開發者關閉 ECI
    • "locked": false:允許開發者控制設定

應用配置

為使 ECI 設定生效

  • 新安裝:使用者啟動 Docker Desktop 並登入
  • 現有安裝:使用者必須完全退出 Docker Desktop 並重新啟動
重要

從 Docker Desktop 選單重啟不足夠。使用者必須完全退出並重新開啟 Docker Desktop。

您還可以為需要 Docker API 訪問的受信任映象配置Docker 套接字掛載許可權

驗證增強容器隔離是否已啟用

啟用 ECI 後,使用這些方法驗證其是否正常工作。

檢查使用者名稱空間對映

執行容器並檢查使用者名稱空間對映

$ docker run --rm alpine cat /proc/self/uid_map

啟用 ECI 後

0     100000      65536

這表示容器的根使用者 (0) 對映到 Docker Desktop VM 中的非特權使用者 (100000),擁有 64K 個使用者 ID 範圍。每個容器都會獲得一個獨佔的使用者 ID 範圍以實現隔離。

關閉 ECI 後

0          0 4294967295

這表示容器根使用者 (0) 直接對映到 VM 根使用者 (0),提供的隔離性較低。

檢查容器執行時

驗證正在使用的容器執行時

$ docker inspect --format='{{.HostConfig.Runtime}}' <container_name>

啟用 ECI 後,它會返回 sysbox-runc。關閉 ECI 後,它會返回 runc

測試安全限制

驗證 ECI 安全限制是否處於活動狀態。

測試名稱空間共享

$ docker run -it --rm --pid=host alpine

啟用 ECI 後,此命令將因 Sysbox 容器無法與主機共享名稱空間而失敗。

測試 Docker 套接字訪問

$ docker run -it --rm -v /var/run/docker.sock:/var/run/docker.sock alpine

啟用 ECI 後,此命令將失敗,除非您為受信任的映象配置了 Docker 套接字例外。

強制執行 ECI 後用戶所看到的內容

當管理員透過設定管理強制執行增強容器隔離時

  • Docker Desktop 設定中會顯示“使用增強容器隔離”設定已啟用。
  • 如果設定為 "locked": true,則該設定將被鎖定並灰顯。
  • 所有新容器將自動使用 Linux 使用者名稱空間。
  • 現有開發工作流程無需修改即可繼續工作。
  • 使用者在 docker inspect 輸出中會看到 sysbox-runc 作為容器執行時。

後續步驟