使用 JSON 檔案配置設定管理

訂閱: 商務版
適用對象: 管理員

設定管理讓您可以使用 `admin-settings.json` 檔案在您的組織中配置和強制執行 Docker Desktop 設定。這將標準化 Docker Desktop 環境,並確保所有使用者都有一致的配置。

先決條件

開始之前,請確保您已具備以下條件:

Docker Desktop 僅在身份驗證和 Docker 商務版授權檢查均成功時,才會套用 `admin-settings.json` 檔案中的設定。

重要

使用者必須已登入,且是 Docker 商務版組織的一員。如果任一條件不符合,該設定檔將會被忽略。

步驟一:建立設定檔

您可以透過兩種方式建立 `admin-settings.json` 檔案:

  • 使用 `--admin-settings` 安裝程式旗標自動產生檔案
  • 手動建立並放置於以下位置:
    • Mac:/Library/Application\ Support/com.docker.docker/admin-settings.json
    • Windows:C:\ProgramData\DockerDesktop\admin-settings.json
    • Linux:/usr/share/docker-desktop/admin-settings.json
重要

將檔案放置在受保護的目錄中,以防止未經授權的更改。使用行動裝置管理 (MDM) 工具(例如 Jamf)在您的組織中大規模分發該檔案。

步驟二:配置設定

提示

有關所有可用設定、其支援的平台以及適用的配置方法的完整列表,請參閱設定參考

`admin-settings.json` 檔案使用結構化鍵來定義可配置的設定以及值是否被強制執行。

每個設定都支援一個 `locked` 欄位,用於控制使用者權限:

  • 當 `locked` 設為 `true` 時,使用者無法在 Docker Desktop、CLI 或配置檔案中更改該值。
  • 當 `locked` 設為 `false` 時,該值就像一個預設建議,使用者仍然可以更新它。

如果使用者已在 `settings-store.json`、`settings.json` 或 `daemon.json` 中自訂了該值,則在現有安裝中會忽略 `locked` 設為 `false` 的設定。

分組設定

Docker Desktop 將一些設定分組在一起,並透過一個單一的切換開關控制整個區塊。這些包括:

  • 增強容器隔離 (Enhanced Container Isolation, ECI):使用一個主切換開關 (`enhancedContainerIsolation`) 來啟用/禁用整個功能,並提供特定配置的子設定
  • Kubernetes:使用一個主切換開關 (`kubernetes.enabled`),並提供叢集配置的子設定
  • Docker Scout:將設定分組在 `scout` 物件下

配置分組設定時:

  1. 設定主切換開關以啟用該功能
  2. 配置該群組內的子設定
  3. 當您鎖定主切換開關時,使用者無法修改該群組中的任何設定。

`enhancedContainerIsolation` 範例

"enhancedContainerIsolation": {
  "locked": true,  // This locks the entire ECI section
  "value": true,   // This enables ECI
  "dockerSocketMount": {  // These are sub-settings
    "imageList": {
      "images": ["docker.io/testcontainers/ryuk:*"]
    }
  }
}

`admin-settings.json` 檔案範例

以下範例是一個已配置常用企業設定的 `admin-settings.json` 檔案。您可以將此範例作為模板,搭配`admin-settings.json` 配置

{
  "configurationFileVersion": 2,
  "exposeDockerAPIOnTCP2375": {
    "locked": true,
    "value": false
  },
  "proxy": {
    "locked": true,
    "mode": "system",
    "http": "",
    "https": "",
    "exclude": [],
    "windowsDockerdPort": 65000,
    "enableKerberosNtlm": false
  },
  "containersProxy": {
    "locked": true,
    "mode": "manual",
    "http": "",
    "https": "",
    "exclude": [],
    "pac":"",
    "transparentPorts": ""
  },
  "enhancedContainerIsolation": {
    "locked": true,
    "value": true,
    "dockerSocketMount": {
      "imageList": {
        "images": [
          "docker.io/localstack/localstack:*",
          "docker.io/testcontainers/ryuk:*"
        ]
      },
      "commandList": {
        "type": "deny",
        "commands": ["push"]
      }
    }
  },
  "linuxVM": {
    "wslEngineEnabled": {
      "locked": false,
      "value": false
    },
    "dockerDaemonOptions": {
      "locked": false,
      "value":"{\"debug\": false}"
    },
    "vpnkitCIDR": {
      "locked": false,
      "value":"192.168.65.0/24"
    }
  },
  "kubernetes": {
     "locked": false,
     "enabled": false,
     "showSystemContainers": false,
     "imagesRepository": ""
  },
  "windowsContainers": {
    "dockerDaemonOptions": {
      "locked": false,
      "value":"{\"debug\": false}"
    }
  },
  "disableUpdate": {
    "locked": false,
    "value": false
  },
  "analyticsEnabled": {
    "locked": false,
    "value": true
  },
  "extensionsEnabled": {
    "locked": true,
    "value": false
  },
  "scout": {
    "locked": false,
    "sbomIndexing": true,
    "useBackgroundIndexing": true
  },
  "allowBetaFeatures": {
    "locked": false,
    "value": false
  },
  "blockDockerLoad": {
    "locked": false,
    "value": true
  },
  "filesharingAllowedDirectories": [
    {
      "path": "$HOME",
      "sharedByDefault": true
    },
    {
      "path":"$TMP",
      "sharedByDefault": false
    }
  ],
  "useVirtualizationFrameworkVirtioFS": {
    "locked": true,
    "value": true
  },
  "useVirtualizationFrameworkRosetta": {
    "locked": true,
    "value": true
  },
  "useGrpcfuse": {
    "locked": true,
    "value": true
  },
  "displayedOnboarding": {
    "locked": true,
    "value": true
  },
  "desktopTerminalEnabled": {
    "locked": false,
    "value": false
  }
}

步驟三:套用設定

設定在 Docker Desktop 重新啟動且使用者登入後生效。

對於新安裝:

  1. 啟動 Docker Desktop。
  2. 使用您的 Docker 帳戶登入。

對於現有安裝:

  1. 完全退出 Docker Desktop。
  2. 重新啟動 Docker Desktop。
重要

您必須完全退出並重新開啟 Docker Desktop。從選單重新啟動是不夠的。

`admin-settings.json` 配置

以下表格描述了 `admin-settings.json` 檔案中所有可用的設定。

注意

部分設定是平台特定的,或需要特定的 Docker Desktop 最低版本。請查閱「版本」欄位以了解要求。

一般設定

參數作業系統描述版本
configurationFileVersion指定配置檔的格式版本。
analyticsEnabled如果 `value` 設為 false,Docker Desktop 將不會向 Docker 傳送使用統計資料。
disableUpdate如果 `value` 設為 true,將會禁用 Docker Desktop 更新檢查和通知。
extensionsEnabled如果 `value` 設為 false,Docker 擴充功能將被禁用。
blockDockerLoad如果 `value` 設為 `true`,使用者將無法執行 `docker load`,如果嘗試執行則會收到錯誤。
displayedOnboarding如果 `value` 設為 `true`,將不會向新使用者顯示 onboarding 歡迎問卷。將 `value` 設為 `false` 將不起作用。Docker Desktop 4.30 版及更高版本
desktopTerminalEnabled如果 `value` 設為 `false`,開發人員將無法使用 Docker 終端機與主機互動,也無法直接從 Docker Desktop 執行命令。
exposeDockerAPIOnTCP2375僅限 Windows在指定連接埠上公開 Docker API。如果 `value` 設為 true,Docker API 將會在連接埠 2375 上公開。注意:這未經身份驗證,只有在受到適當防火牆規則保護的情況下才應啟用。

檔案共享與模擬

參數作業系統描述版本
filesharingAllowedDirectories指定您的開發人員可以新增檔案共享的路徑。也接受 `$HOME`、`$TMP` 或 `$TEMP` 作為 `path` 變數。當新增一個路徑時,其子目錄也會被允許。如果 `sharedByDefault` 設為 `true`,該路徑將在恢復原廠設定或 Docker Desktop 首次啟動時新增。
useVirtualizationFrameworkVirtioFS僅限 macOS如果 `value` 設為 `true`,VirtioFS 將被設為檔案共享機制。注意:如果 `useVirtualizationFrameworkVirtioFS` 和 `useGrpcfuse` 的 `value` 都設為 `true`,則 VirtioFS 優先。同樣地,如果兩者的 `value` 都設為 `false`,則 osxfs 將被設為檔案共享機制。
useGrpcfuse僅限 macOS如果 `value` 設為 `true`,gRPC Fuse 將被設為檔案共享機制。
useVirtualizationFrameworkRosetta僅限 macOS如果 `value` 設為 `true`,Docker Desktop 將開啟 Rosetta 以加速 Apple Silicon 上 x86_64/amd64 二進位檔的模擬。注意:這也會自動啟用 `使用虛擬化框架`。Docker Desktop 4.29 版及更高版本。

Docker Scout

參數作業系統描述版本
scout將 `useBackgroundIndexing` 設為 `false` 會禁用載入到映像儲存的映像自動索引。將 `sbomIndexing` 設為 `false` 會阻止使用者透過在 Docker Desktop 中檢查映像或使用 `docker scout` CLI 命令來索引映像。

代理伺服器設定

參數作業系統描述版本
proxy如果 `mode` 設為 `system` 而非 `manual`,Docker Desktop 會從系統取得代理伺服器值,並忽略為 `http`、`https` 和 `exclude` 設定的值。將 `mode` 更改為 `manual` 以手動配置代理伺服器。如果代理伺服器連接埠是自訂的,請在 `http` 或 `https` 屬性中指定,例如 `"https": "http://myotherproxy.com:4321"`。`exclude` 屬性指定一個逗號分隔的主機和網域列表,以繞過代理伺服器。
       windowsDockerdPort僅限 Windows在本機上透過此連接埠公開 Docker Desktop 的內部代理伺服器,供 Windows Docker 守護程式連接。如果設為 0,則會選擇一個隨機的可用連接埠。如果值大於 0,則使用該確切值作為連接埠。預設值為 -1,會禁用此選項。
       enableKerberosNtlm當設為 `true` 時,Kerberos 和 NTLM 身份驗證將啟用。預設為 `false`。有關更多資訊,請參閱設定文件。Docker Desktop 4.32 版及更高版本。

容器代理伺服器

參數作業系統描述版本
containersProxy建立氣隙容器。有關更多資訊,請參閱 氣隙容器Docker Desktop 4.29 版及更高版本。

Linux 虛擬機設定

參數作業系統描述版本
linuxVM與 Linux 虛擬機選項相關的參數和設定 — 為方便起見,此處將它們分組。
       wslEngineEnabled僅限 Windows如果 `value` 設為 true,Docker Desktop 將使用基於 WSL 2 的引擎。這會覆蓋安裝時使用 `--backend=<後端名稱>` 旗標可能已設定的任何內容。
       dockerDaemonOptions如果 `value` 設為 true,它會覆寫 Docker Engine 配置檔中的選項。請參閱 Docker Engine 參考。請注意,為了增加安全性,當啟用增強容器隔離時,部分配置屬性可能會被覆寫。
       vpnkitCIDR覆寫用於 `*.docker.internal` 的 vpnkit DHCP/DNS 的網路範圍

Windows 容器

參數作業系統描述版本
windowsContainers與 `windowsContainers` 選項相關的參數和設定 — 為方便起見,此處將它們分組。
       dockerDaemonOptions覆寫 Linux 守護程式配置檔中的選項。請參閱 Docker Engine 參考
注意

此設定無法透過 Docker 管理主控台進行配置。

Kubernetes 設定

參數作業系統描述版本
kubernetes如果 `enabled` 設為 true,當 Docker Desktop 啟動時,一個 Kubernetes 單節點叢集將會啟動。如果 `showSystemContainers` 設為 true,Kubernetes 容器將會顯示在 Docker Desktop 儀表板中,以及當您執行 `docker ps` 時。這個 imagesRepository 設定讓您可以指定 Docker Desktop 從哪個儲存庫提取控制平面 Kubernetes 映像。
注意

將 `imagesRepository` 與增強容器隔離 (ECI) 搭配使用時,請將這些映像新增至 ECI Docker socket 掛載映像列表

[imagesRepository]/desktop-cloud-provider-kind: [imagesRepository]/desktop-containerd-registry-mirror:

這些容器會掛載 Docker socket,因此您必須將它們新增到 ECI 映像列表中。否則,ECI 將會阻止掛載,且 Kubernetes 將無法啟動。

網路設定

參數作業系統描述版本
defaultNetworkingMode僅限 Windows 和 Mac定義新 Docker 網路的預設 IP 協定:dual-stack (IPv4 + IPv6,預設值),ipv4only,或 ipv6onlyDocker Desktop 4.43 版及更高版本。
dnsInhibition僅限 Windows 和 Mac控制傳回給容器的 DNS 記錄過濾。選項:auto (推薦),ipv4ipv6noneDocker Desktop 4.43 版及更高版本。

有關更多資訊,請參閱 網路

AI 設定

參數作業系統描述版本
enableInference如果 `allowBetaFeatures` 為 true,將 `enableInference` 設為 `true` 會預設啟用 Docker 模型執行器。您可以獨立於 `allowBetaFeatures` 設定來控制此設定。
        enableInferenceTCP啟用主機端的 TCP 支援。此設定需要先啟用 Docker 模型執行器設定。
        enableInferenceTCPPort指定公開的 TCP 連接埠。此設定需要先啟用 Docker 模型執行器設定。
        enableInferenceCORS指定允許的 CORS 來源。空字串表示拒絕所有,`*` 表示接受所有,或逗號分隔值的列表。此設定需要先啟用 Docker 模型執行器設定。

Beta 功能

重要

對於 Docker Desktop 4.41 版及更早版本,部分設定位於「開發中功能」頁面的 實驗性功能 分頁下。

參數作業系統描述版本
allowBetaFeatures如果 `value` 設為 `true`,Beta 功能將啟用。
enableDockerAI如果 `allowBetaFeatures` 為 true,將 `enableDockerAI` 設為 `true` 會預設啟用 Docker AI (詢問 Gordon)。您可以獨立於 `allowBetaFeatures` 設定來控制此設定。
enableDockerMCPToolkit如果 `allowBetaFeatures` 為 true,將 `enableDockerMCPToolkit` 設為 `true` 會預設啟用 MCP 工具包功能。您可以獨立於 `allowBetaFeatures` 設定來控制此設定。
allowExperimentalFeatures如果 `value` 設為 `true`,實驗性功能將啟用。Docker Desktop 4.41 版及更早版本

增強容器隔離

參數作業系統描述版本
enhancedContainerIsolation如果 `value` 設為 true,Docker Desktop 將透過 Linux 使用者命名空間,以非特權方式執行所有容器,阻止它們修改 Docker Desktop 虛擬機內的敏感配置,並使用其他進階技術來隔離它們。有關更多資訊,請參閱 增強容器隔離
       dockerSocketMount預設情況下,增強容器隔離會阻止將 Docker Engine socket 綁定掛載到容器中(例如,docker run -v /var/run/docker.sock:/var/run/docker.sock ...)。這讓您可以以受控方式放寬此限制。有關更多資訊,請參閱 ECI 配置
              imageList指示哪些容器映像允許綁定掛載 Docker Engine socket。
              commandList限制容器可以透過綁定掛載的 Docker Engine socket 發出的命令。
© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.