使用 JSON 文件配置设置管理

注意

设置管理仅适用于 Docker Business 客户。

本页面包含有关如何使用 admin-settings.json 文件配置设置管理的信息。您可以指定并锁定配置参数,以便在整个公司或组织内创建标准化的 Docker Desktop 环境。

设置管理专为不允许开发者拥有机器 Root 权限的组织而设计。

前提条件

您首先需要 强制登录,以确保所有 Docker Desktop 开发人员都通过您的组织进行身份验证。由于设置管理需要 Docker Business 订阅,强制登录可确保只有经过身份验证的用户才能访问,并且该功能在所有用户中持续生效,即使在没有强制登录的情况下它可能仍然有效。

第一步:创建 admin-settings.json 文件并将其保存在正确的位置

您可以在macOSWindows上使用 --admin-settings 安装标志来自动创建 admin-settings.json 并将其保存到正确的位置,或者手动进行设置。

手动设置:

  1. 创建一个新的空 JSON 文件并将其命名为 admin-settings.json

  2. admin-settings.json 文件保存在开发人员计算机上的以下位置:

    • 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

    通过将此文件放置在受保护的目录中,开发人员无法修改它。

    重要

    假设您能够通过设备管理软件(例如 Jamf)将 admin-settings.json 设置文件推送到指定位置。

第二步:配置您想要锁定的设置

注意

某些配置参数仅适用于特定平台或特定的 Docker Desktop 版本。下表中对此进行了说明。

admin-settings.json 文件需要一个嵌套的配置参数列表,每个参数都必须包含 locked 参数。您可以根据需要添加或删除配置参数。

如果为 locked: true,用户将无法从 Docker Desktop 或 CLI 编辑此设置。

如果为 locked: false,则类似于设置出厂默认值,因为:

  • 对于新安装,locked: false 会在 Docker Desktop Dashboard 中预填充相关设置,但用户可以对其进行修改。

  • 如果 Docker Desktop 已经安装并正在使用,则会忽略 locked: false。这是因为 Docker Desktop 的现有用户可能已经更新了设置,该设置随后会被写入相关的配置文件,例如 settings-store.json(或对于 Docker Desktop 4.34 及更早版本为 settings.json)或 daemon.json。在这些情况下,会尊重用户的偏好设置,且值不会被更改。这些可以通过设置 locked: true 来控制。

下面的 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
  },
  "allowExperimentalFeatures": {
    "locked": false,
    "value": false
  },
  "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
  }
}

通用

参数OS描述版本
configurationFileVersion指定配置文件格式的版本。
analyticsEnabled如果将 value 设置为 false,Docker Desktop 将不会向 Docker 发送使用统计数据。
disableUpdate如果将 value 设置为 true,则将禁用 Docker Desktop 更新的检查和通知。
extensionsEnabled如果将 value 设置为 false,则 Docker 扩展将被禁用。
blockDockerLoad如果 value 被设置为 true,用户将无法再运行 docker load,如果尝试运行则会收到错误。
displayedOnboarding如果将 value 设置为 true,则不会向新用户显示引导调查。将 value 设置为 false 没有任何效果。Docker Desktop 4.30 及更高版本
desktopTerminalEnabled如果将 value 设置为 false,开发人员将无法使用 Docker 终端与主机交互,也无法直接从 Docker Desktop 执行命令。
exposeDockerAPIOnTCP2375仅限 Windows在指定端口上公开 Docker API。如果将 value 设置为 true,则 Docker API 将在端口 2375 上公开。注意:这是未经身份验证的,只有在受合适的防火墙规则保护的情况下才应启用。

文件共享与模拟

参数OS描述版本
filesharingAllowedDirectories指定开发者可以添加文件共享的路径。也接受 $HOME$TMP$TEMP 作为 path 变量。添加路径后,其子目录将被允许。如果 sharedByDefault 设置为 true,则该路径将在恢复出厂设置或 Docker Desktop 首次启动时添加。
useVirtualizationFrameworkVirtioFS仅限 macOS如果 value 设置为 true,则 VirtioFS 被设置为文件共享机制。注意:如果 useVirtualizationFrameworkVirtioFSuseGrpcfuse 都将 value 设置为 true,则 VirtioFS 优先。同样,如果 useVirtualizationFrameworkVirtioFSuseGrpcfuse 都将 value 设置为 false,则 osxfs 被设置为文件共享机制。
useGrpcfuse仅限 macOS如果 value 被设置为 true,则 gRPC Fuse 被设置为文件共享机制。
useVirtualizationFrameworkRosetta仅限 macOS如果将 value 设置为 true,Docker Desktop 会开启 Rosetta 以加速 Apple Silicon 上 x86_64/amd64 Binaries的模拟。注意:这也会自动启用 Use Virtualization frameworkDocker Desktop 4.29 及更高版本。

Docker Scout

参数OS描述版本
scoutuseBackgroundIndexing 设置为 false 可禁用已加载到镜像存储的镜像的自动索引。将 sbomIndexing 设置为 false 可防止用户通过在 Docker Desktop 中检查镜像或使用 docker scout CLI 命令来索引镜像。

代理

参数OS描述版本
proxy如果将 mode 设置为 system 而不是 manual,Docker Desktop 会从系统获取代理值,并忽略为 httphttpsexclude 设置的值。将 mode 更改为 manual 以手动配置代理服务器。如果代理端口是自定义的,请在 httphttps 属性中指定,例如 "https": "http://myotherproxy.com:4321"exclude 属性指定了绕过代理的主机和域的逗号分隔列表。
       windowsDockerdPort仅限 Windows在本地公开 Docker Desktop 的内部代理供 Windows Docker 守护进程连接到此端口。如果设置为 0,则会选择一个随机空闲端口。如果值大于 0,则使用该确切值作为端口。默认值为 -1,表示禁用该选项。
       enableKerberosNtlm当设置为 true 时,Kerberos 和 NTLM 身份验证被启用。默认值为 false。有关更多信息,请参阅设置文档。Docker Desktop 4.32 及更高版本。

容器代理

参数OS描述版本
containersProxy创建Air-gapped containers。更多信息请参阅 Air-gapped containersDocker Desktop 4.29 及更高版本。

Linux 虚拟机

参数OS描述版本
linuxVM与 Linux 虚拟机选项相关的参数和设置 - 为了方便起见,在此处集中列出。
       wslEngineEnabled仅限 Windows如果将 value 设置为 true,Docker Desktop 将使用基于 WSL 2 的引擎。这将覆盖在安装时使用 --backend=<backend name> 标志设置的任何内容。
       dockerDaemonOptions如果将 value 设置为 true,它将覆盖 Docker Engine 配置文件中的选项。请参阅 Docker Engine 参考。请注意,为了增强安全性,启用增强容器隔离时,可能会覆盖一些配置属性。
       vpnkitCIDR覆盖 vpnkit DHCP/DNS 使用的网络范围,用于 *.docker.internal

Windows 容器

参数OS描述版本
windowsContainerswindowsContainers 选项相关的参数和设置 - 为方便起见在此分组。
       dockerDaemonOptions覆盖 Linux 守护进程配置文件中的选项。参见 Docker Engine 参考

注意

此设置无法通过 Docker 管理控制台进行配置。

Kubernetes

参数OS描述版本
kubernetes如果将 enabled 设置为 true,Docker Desktop 启动时会启动一个 Kubernetes 单节点集群。如果将 showSystemContainers 设置为 true,Kubernetes 容器将显示在 Docker Desktop Dashboard 中,以及您运行 docker ps 时。imagesRepository 允许您指定 Docker Desktop 从哪个仓库拉取 Kubernetes 镜像。例如,"imagesRepository": "registry-1.docker.io/docker"

开发中的功能

参数OS描述版本
allowExperimentalFeatures如果将 value 设置为 false,则会禁用实验性功能。
allowBetaFeatures如果 value 被设置为 false,Beta 功能将被禁用。

增强的容器隔离性

参数OS描述版本
enhancedContainerIsolation如果将 value 设置为 true,Docker Desktop 将通过 Linux 用户命名空间以非特权模式运行所有容器,防止它们修改 Docker Desktop VM 内部的敏感配置,并使用其他高级技术对其进行隔离。有关更多信息,请参阅 增强型容器隔离
       dockerSocketMount默认情况下,增强型容器隔离会阻止将 Docker Engine 套接字绑定挂载到容器中(例如,docker run -v /var/run/docker.sock:/var/run/docker.sock ...)。这允许您以受控的方式放宽此限制。有关更多信息,请参阅 ECI 配置
              imageList指示允许哪些容器镜像绑定挂载 Docker Engine 套接字。
              commandList限制容器可以通过绑定挂载的 Docker Engine 套接字发出的命令。

第三步:重新启动 Docker Desktop

注意

在本地测试通过 admin-settings.json 文件所做的更改,以查看设置是否按预期工作。

设置生效:

  • 在全新安装时,开发者需要启动 Docker Desktop 并通过其组织进行身份验证。
  • 对于现有安装,开发者需要通过 Docker 菜单退出 Docker Desktop,然后重新启动 Docker Desktop。如果他们已经登录,则无需再次登录即可使更改生效。

    重要

    仅从 Docker 菜单中选择重启是不够的,因为它仅重启 Docker Desktop 的部分组件。

为了不打断开发者的工作流,Docker 不会在做出更改后自动强制要求开发者重新启动和重新认证。

在 Docker Desktop 中,开发者看到相关设置显示为灰色,并显示消息已被管理员锁定

Proxy settings grayed out with Settings Management